C語言 - 第一章 | IDE介紹及安裝
IDE是什麼?
整合開發環境(簡稱IDE;Integrated Develop Environment)。
由於編譯語言需要經由撰寫、編譯、連結、除錯、執行等過程,而早期的編譯語言中,負責這幾部分的軟體都各自獨立,使得編譯語言不如直譯語言來得方便。但目前多數的高階程式語言都已經採用IDE方式,將編輯器(Editor)、編譯器(Compiler)、連結器(Linker)、除錯器(Debugger)、執行(Execution)等功能整合在同一套軟體中,使得程式發展的各項操作更加容易。
C語言推薦的IDE
註:這邊選擇使用
Visual Studio
為主要開發工具。
Visual Studio 安裝
安裝會需要大量的網路與硬碟空間,視選擇的套件而定。
- 至連結,下載[Visual Studio Community 2019]
註:
Community
版本為免費版,基本功能已經足夠使用,如要下載Professional
或Enterprise
,請自行添購安裝。 - 執行下載的安裝程式
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' 函式。程式會於該處開始執行及結束執行。
//
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' 函式。程式會於該處開始執行及結束執行。
//
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// 未縮排
int main(){
printf("Hello world!\n");
return 0;
}
// 縮排
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
(包括但不限於2019
、2015
、2013
、2012
)編譯代碼時,卻會出現意想不到的錯誤。
有如下一段簡單的代碼:
1 |
|
但會輸出一個錯誤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 |
|
便沒有錯誤提示了。
scanf
與scanf_s
在MSDN
有介紹這些以_s
結尾的函數,包括scanf_s
、scanf_s_l
、wscanf_s
、_wscanf_s_l
。這些版本的函數具有安全增強功能。
scanf
等函數存在於版本較舊的CRT
(C runtime library, part of the C standard library
)中,具有安全性問題,比如在讀取字元時,若不指定%s
的寬度,可能會導致緩衝區溢出。
在使用scanf
時,如果規定了讀取的寬度,便不會報錯。將代碼修改如下:
1 |
|
這裡控制了讀入的%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