Like Share Discussion Bookmark Smile

J.J. Huang   2019-10-05   C   瀏覽次數:

C語言 - 第一章 | IDE介紹及安裝

IDE是什麼?

整合開發環境(簡稱IDE;Integrated Develop Environment)。

由於編譯語言需要經由撰寫、編譯、連結、除錯、執行等過程,而早期的編譯語言中,負責這幾部分的軟體都各自獨立,使得編譯語言不如直譯語言來得方便。但目前多數的高階程式語言都已經採用IDE方式,將編輯器(Editor)、編譯器(Compiler)、連結器(Linker)、除錯器(Debugger)、執行(Execution)等功能整合在同一套軟體中,使得程式發展的各項操作更加容易。


C語言推薦的IDE

註:這邊選擇使用Visual Studio為主要開發工具。


Visual Studio 安裝

安裝會需要大量的網路與硬碟空間,視選擇的套件而定。

  • 連結,下載[Visual Studio Community 2019]

    註:Community版本為免費版,基本功能已經足夠使用,如要下載ProfessionalEnterprise,請自行添購安裝。

  • 執行下載的安裝程式vs_Community.exe
  • 你是否要允許下列程式變更這部電腦?點擊是(Y)
  • 在你開始之前,我們需要設定一些項目,以便你設定安裝。點擊繼續
  • 耐心等候
  • 瀏覽一下可以安裝的套件和設定
  • 勾選使用 C++ 的桌面開發Visual Studio 擴充功能開發
  • 點擊安裝,並等待安裝完畢⋯

    注:安裝過程時間很長並非卡住,請耐心等候。

  • 安裝完畢,點擊不是現在,以後再說。

啟動 Visual Studio

  • 我這邊最後試過後,決定選擇淺色 (各位可自行選擇,之後也可以調整)
  • 調整色彩佈景主題 (工具->選項->環境->色彩佈景主題)
  • 調整字型大小 (工具->選項->環境->字型與色彩->大小)

建立專案及執行

  • 選擇建立新的專案(N)

  • 選擇主控台應用程式

  • 修改專案名稱為HelloWorld

  • 啟動後,會自帶一個C++版本的HelloWorld程式碼

  • F5偵錯程式

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    // HelloWorld.cpp : 此檔案包含 'main' 函式。程式會於該處開始執行及結束執行。
    //

    #include <iostream>

    int main()
    {
    std::cout << "Hello World!\n";
    }

    // 執行程式: Ctrl + F5 或 [偵錯] > [啟動但不偵錯] 功能表
    // 偵錯程式: F5 或 [偵錯] > [啟動偵錯] 功能表

    // 開始使用的提示:
    // 1. 使用 [方案總管] 視窗,新增/管理檔案
    // 2. 使用 [Team Explorer] 視窗,連線到原始檔控制
    // 3. 使用 [輸出] 視窗,參閱組建輸出與其他訊息
    // 4. 使用 [錯誤清單] 視窗,檢視錯誤
    // 5. 前往 [專案] > [新增項目],建立新的程式碼檔案,或是前往 [專案] > [新增現有項目],將現有程式碼檔案新增至專案
    // 6. 之後要再次開啟此專案時,請前往 [檔案] > [開啟] > [專案],然後選取 .sln 檔案
  • 這邊主要開始學習C語言,所以將程式碼修改為C語言

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    // HelloWorld.cpp : 此檔案包含 'main' 函式。程式會於該處開始執行及結束執行。
    //

    #include <stdio.h>

    int main()
    {
    printf("Hello World!\n");

    return 0;
    }

    // 執行程式: Ctrl + F5 或 [偵錯] > [啟動但不偵錯] 功能表
    // 偵錯程式: F5 或 [偵錯] > [啟動偵錯] 功能表

    // 開始使用的提示:
    // 1. 使用 [方案總管] 視窗,新增/管理檔案
    // 2. 使用 [Team Explorer] 視窗,連線到原始檔控制
    // 3. 使用 [輸出] 視窗,參閱組建輸出與其他訊息
    // 4. 使用 [錯誤清單] 視窗,檢視錯誤
    // 5. 前往 [專案] > [新增項目],建立新的程式碼檔案,或是前往 [專案] > [新增現有項目],將現有程式碼檔案新增至專案
    // 6. 之後要再次開啟此專案時,請前往 [檔案] > [開啟] > [專案],然後選取 .sln 檔案
  • F5偵錯程式

說明

  • 標頭檔 Header:#include<stdio.h>

    • 告訴編譯器(compiler)會用到哪些函式庫
    • stdio = standard input and output
    • 標準輸入輸出
  • 主程式 Main:int main() {}

    • 主程式;Main function,程式進入點(Entry point)是main()這個函式
    • int;執行完畢後回傳整數型態
    • ( );參數定義
    • { };程式內容 (裡面就是這支程式要做的事情)
  • 程式主體:printf("Hello World!\n"); return 0;

    • printf:印出後面參數內容(誇號內之內容,可用雙引號包含一段文字),為C語言提供的標準輸出函式
    • return:回傳值,程式結束後會回傳一個數值,通常 0 表示正常結束
    • \n:換行符號,程式不會自動換行,如果沒加,下段文字會接在後面繼續寫
  • 註解Comment

    • //:單行註解
    • /* */:多行註解
    • 編譯會忽略該行,主要用於備註該段語法的說明之類的
  • 縮排Indent

    • 主要是善於閱讀
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      // 未縮排
      #include <stdio.h>
      int main(){
      printf("Hello world!\n");
      return 0;
      }
      // 縮排
      #include <stdio.h>

      int main()
      {
      printf("Hello world!\n");
      return 0;
      }
  • 編譯Compile過程

    • 原始程式 –> 經由編譯器 –> 目的檔 –> 經由連結器 –> 執行檔
    • source.c –> COMPILER –> source.o –> LINKER –> source.exe
  • 編譯、執行指令

    • gcc source.c -o run.exe
    • ./run.exe
  • IDE工具的編譯及執行

    • F5偵錯程式

額外補充

問題:scanf()scanf_s()與錯誤C4996

錯誤C4996

初學C語言時,第一個接觸到的I/O函數便是scanf()了。
但在高版本的Visual Studio(包括但不限於2019201520132012)編譯代碼時,卻會出現意想不到的錯誤。
有如下一段簡單的代碼:

1
2
3
4
5
6
7
8
9
#include "stdio.h"
int main(void)
{
int i;
printf("Input i\n");
scanf("%d", &i);
printf("i is %d", i);
return 0;
}

但會輸出一個錯誤C4996,錯誤訊息如下

1
錯誤	C4996	'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.	HelloWorld	C:\Users\morose\source\repos\HelloWorld\HelloWorld\HelloWorld.cpp	14

報錯說scanf不安全,推薦將scanf替換scanf_s。替換之後之後,代碼如下:

1
2
3
4
5
6
7
8
9
#include "stdio.h"
int main(void)
{
int i;
printf("Input i\n");
scanf_s("%d", &i);
printf("i is %d", i);
return 0;
}

便沒有錯誤提示了。

scanfscanf_s

MSDN有介紹這些以_s結尾的函數,包括scanf_sscanf_s_lwscanf_s_wscanf_s_l。這些版本的函數具有安全增強功能。

scanf等函數存在於版本較舊的CRT(C runtime library, part of the C standard library)中,具有安全性問題,比如在讀取字元時,若不指定%s的寬度,可能會導致緩衝區溢出。

在使用scanf時,如果規定了讀取的寬度,便不會報錯。將代碼修改如下:

1
2
3
4
5
6
7
8
9
#include "stdio.h"
int main(void)
{
int i;
printf("Input i\n");
scanf_s("%5d", &i);
printf("i is %d", i);
return 0;
}

這裡控制了讀入的%d寬度為5
但是讀入的資料超過寬度的限制時,便會丟失資料。比如這是輸入100000,輸出的i值為10000

解決方法

  • 1.使用scanf時規定寬度。
  • 2.使用sacnf_s替換sacnf
  • 3.在新建項目的時候取消SDL檢查。


註:以上參考了
hackersir gitbooks
在 Visual Studio 2019 中建立和執行 C 專案
vs2019安装和使用教程(详细)
使用 Visual Studio Code 寫 C/C++
C語言雜談(一)scanf()、scanf_s()與錯誤 C4996