毫無編程基礎的小白準備學習C語言,用VC6還是VS2015?
一開始下的C Free ,界面大愛,簡潔乾淨。但是怎麼都完成不了HELLO WORLD,怒刪。今早下了一個VC6,下了一個VS2015,請問該用哪個?我是純小白!
地方就在不久之前,無論是VC6還是VS2015都不適合學習C語言,因為兩者對C根本沒有好好支持,都是針對C++的IDE。然而最近VS2015 Update 1新增了用clang作為前端的選項,它對C99有良好的支持,再加上VS方便的編輯調試體驗,你終於可以享受了。
新建項目後,打開項目屬性,然後在toolset中選取clang即可。
補充一下具體操作,首先你需要安裝Visual Studio with Update 1,選擇自定義安裝,然後選中以下兩項:
和
接下來我們只要在Visual C++的項目中即可使用clang的前端了。
實際上VC也支持大部分的C99特性,但是少數特性不支持。我們下面的例子中就有VC本身不支持的C99特性:
#include "stdio.h"
struct point
{
int x;
int y;
};
/* C99特性:restrict指針提示編譯器該指針是訪問所指目標的唯一方式 */
static inline void swap_int(int * restrict p1, int * restrict p2)
{
// 不要這樣實現(C99特性://開頭的注釋)
*p1 = *p1 ^ *p2;
*p2 = *p1 ^ *p2;
*p1 = *p1 ^ *p2;
}
/* C99特性:static inline函數 */
static inline void swap_point(struct point * p1, struct point* p2)
{
swap_int(p1-&>x, p2-&>x);
swap_int(p1-&>y, p2-&>y);
}
int main()
{
struct point p =
{
.x = 2,
.y = 3
};
/* C99特性:複合型字面量 */
swap_point(p,
((struct point) { .x = -5, .y = 2 }));
printf("After swap, the point is (%d, %d)
", p.x, p.y);
if (p.y &<= 0) return 0; /* C99特性:變長數組 */ int vla[p.y]; vla[p.y - 1] = 20; printf("The length of vla is %d ", sizeof(vla) / sizeof(int)); return 0; }
保存為擴展名為.c的文件後,如果用VC來編譯,會出現數個編譯錯誤。這是因為restrict被VC用於C++ AMP特性了,並非C99當中的restrict指針。另外變長數組特性也是不支持的。現在我們只要打開項目屬性,找到Platform Toolset這一選項,選為Clang前端+C2後端的組合:
再次編譯該項目,就能完全編譯通過,正確運行了!
目前的版本支持到Clang 3.7
vs2015 太大,功能太多,容易嚇到小白。。。當時初學的時候被工程嚇尿了,挖草這是啥,還有那麼多 h 啊什麼鬼。。。
所以我還是比較推薦 code::block 或者 dev-cpp...
1000贊更新:
被一群聚聚的答案頂到了後面,這裡簡要引用一下:
@裝配腦袋聚聚寫明了如何用VS使用clang作為編譯器,以支持C99特性
毫無編程基礎的小白準備學習C語言,用VC6還是VS2015? - 裝配腦袋的回答
@Belleve聚聚寫明了如何使用tdm-gcc和VSCode在Windows環境下編輯編譯並調試程序
毫無編程基礎的小白準備學習C語言,用VC6還是VS2015? - Belleve 的回答
大家一起把各種工具鏈IDE的配置和使用教程都湊齊了,這樣才新手友好
忘了說了照下面的步驟裝完VS,佔用空間大約12G,C盤空間不夠的慎重考慮
正文:
首先,到這裡下載VS2015
Visual Studio
安裝的時候,記得不要用默認安裝
把這個點上,其他的都不要
只要那個紅圈的東西,其他的不勾
裝好了打開
注意左邊那個解決方案管理器,你每一個程序的代碼文件都會出現在這裡,只有出現在這裡的文件才會被編譯,如果不小心關掉了可以在上面的視圖菜單里打開新建工程:
文件-新建-項目
注意那個名稱,是你的工程的名稱,不是代碼文件的名稱,所以不用加.c
彈出窗口點下一步
空項目勾上,SDL關掉,小白不需要知道scanf_s怎麼用,讓warning留著
完成之後,解決方案管理器有東西了
源文件那裡,右鍵-添加-新建項
注意一定要把後綴名改成.c,不要用cpp後綴
添加完成後就能正常寫代碼了
生成就是編譯,f7編譯整個工程
調試就是調試
給一個 gcc 系的教程,按照此方法可以成功安裝 gcc 以及 gdb。
- 在瀏覽器地址欄輸入 http://tdm-gcc.tdragon.net/ 進入 tdm-gcc 主頁
- 點擊 Download 進入下載頁,根據系統的位數選擇對應的版本。操作系統的位數可以在「控制面板 —— 系統」中看到
- 安裝,點 Create,一路 Next,等待安裝完成
- 此時你在 C: 底下應該能看到一個類似這樣的文件夾,看到的話就表明安裝成功了
- 此時打開 Powershell(開始菜單里直接可以找到),輸入 gcc,應該可以看到這樣的提示,TDM-GCC 安裝器會幫你設置好環境變數。
- 打開文本編輯器,比如(如 Visual Studio Code)
- 保存成 .c 文件(一定要注意「文件名」那兒一定得是 .c 結尾)
- 輸入內容,保存
- 在資源管理器裡面找到你保存 .c 文件的目錄
- 如果你在這裡看到了 hello 後面的「類型」裡面顯示的是「文本文件」或者標誌是記事本的圖標,說明你編輯器保存的時候保存錯擴展名了,請重新保存
- 如果你圖標不是記事本,後面的「類型」也不是「文本文件」,但是只顯示了 hello 而不是 hello.c 的話,請在「控制面板 → 文件夾選項/文件資源管理器選項」中,取消勾選「查看」頁內的「隱藏已知類型的擴展名」,如圖
- 複製目錄路徑
- 在 Powershell 中用 cd 命令進入這個路徑
- 在 Powershell 中輸入 gcc hello.c -o hello.exe,這裡第一條下劃線底下是你剛才保存的 .c 文件的名字,第二條下劃線寫的是你打算把編譯出來的程序保存成什麼。如果 gcc 編譯成功,應該就可以看到 exe 生成了:
- 運行之,成功。
————————————————————————————————————————————
下面說怎麼在 VSCode 中調試
- 打開編輯器,按 F1 鍵打開命令功能,輸入 ext install 並回車,可以顯示擴展安裝菜單。
- 繼續輸入 gdb,可以看到一個叫做 Debug 的擴展,按回車安裝之,成功的話 VSCode 會在一會兒之後提示重啟,按他的要求重啟編輯器。
- 點擊左側第四個「調試」按鈕,然後點擊「齒輪」按鈕,在彈出的列表中選擇 GDB,啟動 GDB 調試器支持
- 此時你應該能看到窗口中顯示了一個叫做 launch.json 的配置文件,並且左側的文件列表中多了一個 .vscode 的目錄,以及 launch.json 的文件。在 .vscode 目錄下新建一個 tasks.json 的文件,然後把兩個配置文件的內容如下設置:
- .vscode/launch.json:
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug",
"type": "gdb",
"request": "launch",
"target": "./out.exe",
"cwd": "${workspaceRoot}",
"preLaunchTask": "gcc"
}
]
}
- .vscode/tasks.json:(第三行中的 hello.c 要和你正在編輯的 .c 文件名相同,如果更換了文件,此處也要對應修改。)
{
"version": "0.1.0",
"command": "gcc",
"args": ["-g", "hello.c", "-o", "out.exe"],
"problemMatcher": {
"owner": "c",
"fileLocation": ["relative", "${workspaceRoot}"],
"pattern": {
"regexp": "^(.*):(\d+):(\d+):\s+(warning|error):\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
}
- 點左側第四個按鈕切到調試界面,點擊綠色三角(Launch,快捷鍵 F5),如果之前設置成功的話,此時調試器應該可以成功了。你可以試著點擊下行號左側的空白新建個斷點然後啟動調試,此時你應該看到一個黃色的箭頭停在斷點上,並且左側顯示出當前的局部變數(如此處是 x),此時就可以使用標準的調試功能了。
以上。
Code::Blocks
或者cLion
Dev c++ 我初學C時,有人推薦給我用。
很小巧的軟體。幾十M.
寫C 夠用了。
下載鏈接:Dev-C++ download
安裝時,一開始叫你選擇語言,默認英語,不要管他,直接下一步,直到安裝完畢。
第一次打開軟體,又叫你選擇語言,這時有簡體中文選項,果斷選之。
不要用什麼linux,目前沒必要,初學者都不會爬,就有人叫你跑了,這逼裝的。
歡迎訪問博客:為什麼 C/C++ 初學者應該使用 CLion 而不是 Visual Studio?
================
初學者用 CLion 吧,折騰啥 VS 呢?
(此文略複雜,所以——
真×小白只用看加下劃線的部分即可,
真×小白只用看加下劃線的部分即可,
真×小白只用看加下劃線的部分即可,加粗而沒下劃線的不太重要)
================
=====吐槽的分割線=====
================
- 無論是 VC 6(其實 VC 6 還是挺萌的,畢竟還能裝 VAX,體驗不輸沒裝 ReSharper 的現代版本 VS)還是 VS 2015,都不真正支持 C。
- VS 巨大,安裝包大達數 G,帶上 update 更大,而 CLion 安裝文件只有 200 多 MB。
- VS 的配置複雜難懂,受制於遺留太多,比如配色界面選項巨多,很多東西不知所云,而且沒有預覽。
- CLion 能給出更多的分析/提示(比如 unsed variable, unreachable code, missing break 等等),對新手更有用(對人類都很有用)。
- CLion 有更良好的開發體驗(VS 的快捷鍵很多都是連招才能發的,比如注釋、格式化)。
- CLion 是完全跨平台的,它的 IDE 本身全平台都有版本,項目文件/構建工具(即 CMake)也是跨平台的。CMake 是微軟欽定的跨平台構建工具,CoreCLR、ChakraCore 等項目都是用 CMake 構建的。
- VS 寫模板的時候 IDE 功能基本失效。參考 Visual Studio not giving me errors because of template before each function. C++
當然,空口無憑。在 tutorial 的後面我會做一個類似基準測試的東西,比較一下 CLion 和 VS 的體驗,和對初學者的幫助。(非小白可以略過 tutorial)
================
=====教程的分割線=====
================
那麼說了這麼多,該怎麼用 CLion 呢?
===========題外話===========
如果你已經裝了 VS,又想享受以上好處,那就裝 ReSharper C++ 吧。詳情可以參考如何擺脫對Visual Studio的依賴? - Colliot 的回答。
==========進入正題==========
我們知道,集成開發環境(IDE)和編譯工具鏈(toolchain)是不必然綁定的。所以接下來我們分兩步,第一步搞定 IDE,第二步搞定工具。下面開始第一步。
----------------
---第一步--安裝環境----
----------------
安裝 CLion 很簡單,就是一個 .exe 的安裝包(https://www.jetbrains.com/clion/download/),兩百兆,安裝好了可能一個G,安裝速度也不會比一般的軟體更慢(參考 VS 的 11G 起,雖然 VS 15 改進了,可是我這裡網慢裝不上,類似地,裝 Bash for Windows 也很慢,還看運氣)
----------------
--第二步--安裝工具鏈----
----------------
工具鏈方面,推薦使用 msys2(遵照這個回答安裝 tdm-gcc,毫無編程基礎的小白準備學習C語言,用VC6還是VS2015? - Belleve 的回答,然後使用 CLion 自帶的 CMake,應該也是可行的)。msys2 是一個 cygwin 的 fork,加上了用 pacman 支持的包管理系統(不用什麼 cyg-apt, apt-cyg 了),同時支持 MinGW 的編譯工具鏈。源里一般有三份 binary(mingw 32位/64位,msys2)。
安裝的話,只要在它的主頁下載安裝包就好了(MSYS2 installer),推薦 64 位(x86_64,不是i686,以下步驟可能與此相關。32位也是可以的,但是部分文字可能有所區別)的。這很小,因為只有最基本的 shell,沒有預裝工具鏈。安裝之後,可以在開始菜單找到它:
三個入口,做了一些環境的設置,win32的進去,默認的工具鏈都會是 32 位 mingw 的版本(mingw_w64_i686),win64的進去就是64位的(mingw_w64_x86_64),msys2 進去就是 msys2 的(類似 cygwin,編譯出來需要一個 dll 才能運行)。隨便哪個打開都可以。
現在 msys2 里啥都沒有,只是一個空殼,我們需要裝相應的工具鏈。根據makefile - CMAKE_MAKE_PROGRAM not found,我們需要裝的東西如下:
pacman -S mingw-w64-x86_64-cmake mingw-w64-x86_64-extra-cmake-modules
pacman -S mingw-w64-x86_64-make
pacman -S mingw-w64-x86_64-gdb
pacman -S mingw-w64-x86_64-toolchain
只要原樣輸入這四條,每次回車,並根據提示一路回車就可以了(裡面似乎有重複的,實際上應該只要第一行和最後一行即可),32 位的可能需要將 w64_x86_64 改為 w32_i686。
現在我們有了完整的工具鏈,包括 gcc, make 和 cmake。這樣,CLion 就能運作了。
初次打開 CLion,它可能會讓你選擇工具鏈,或者,以後可以在 File -&> Settings (Ctrl+Alt+S)里更改:
如果是 32 位的,就應該在 msys2 安裝目錄下的 mingw32 文件夾下的相應位置,而不是 mingw64。一個能正常運行的配置應當如上圖所示。
這樣我們就完成了整個環境的配置,可以開始寫了。
================
=====開始用的分割線====
================
打開 CLion,新建一個項目(project),你會看到兩個文件,一個是你期待的 main.cpp,另一個是 CMakeLists.txt,這是 CMake 的構建清單,相當於項目文件。如果你只是要單純地寫 C++ 一個小程序,直接在 main.cpp 里寫就可以了,無須做任何設置。如果你需要寫 C 語言,直接寫也可以,但是最好將後綴名改為 .c——方法是右鍵 main.cpp,選擇 Refactor-&>Rename,或者在文件列表中選中 main.cpp,然後按 Shift+F6。
項目和構建系統方面,Clion 採用的是(兩者都基於)跨平台的 CMake 元構建系統,不像VS使用的是私有項目系統和 MSBuild(?)。CMake 可以輕鬆支持多個目標(可執行文件、庫)的構建(當然 VS 也可以,你只要添加「項目」,而不是新建「項目」或者添加」文件「。微軟也支持 CMake,它開源的 .NET Core, CharkraCore 等項目都使用 CMake。
CMake 和 CLion 基於 CMake 的項目分析都能正確區分 C 和 C++ 的擴展名,給予正確的編譯、構建和分析。因此,只要自己注意擴展名是 .c 還是 .cpp/.cc/.C 等即可。
實際上,構建多個目標,是小白很常見的一種需求。比方說如果在做題,總不可能為每個題目都新建一個項目吧。這時候我們就需要改動項目了。和 VS 的圖形設置不同,CLion 的項目基於文本,也就是 CMakeLists.txt。
如果你要添加一個可執行文件(比方說,就是開始寫另一道題目),最簡單的命令就是
add_executable(可執行文件名 源碼1 源碼2 源碼3 …),只要會這一條,應該就可以解決所有小白時代的需求了。比如 add_executable(another_solution solution2.c) 就聲明了一個名為 another_solution 的可執行文件(擴展名會自動根據平台添加,比如 Linux 就沒有,Windows 下就是 .exe),它是從 solution2.c 編譯過來的。
CLion最新的項目模板中,CMakeLists.txt的樣子應該是這樣的(也就是你看見的模樣):
#cmake_minimum_required(VERSION &
project(testflight)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(SOURCE_FILES main.cpp)
add_executable(testflight ${SOURCE_FILES})
如果,你要像上面一樣添加了名為 another_solution 的目標的話,新的 CMakeLists.txt 就應該是這樣的:
#cmake_minimum_required(VERSION &
project(testflight_curses)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(SOURCE_FILES main.cpp)
add_executable(testflight ${SOURCE_FILES})
add_executable(another_solution solution2.c)
當然,記得新建 solution2.c 這個文件,你可以通過右鍵任意文件-&>New-&>C++ Source File的圖形界面來新建,也可以直接New-&>File,然後輸入 solution2.c,後者相比前者,不會有模板內容,是個空文件。不過對於源文件(相比於頭文件),這並沒有任何影響。
我想,小白看到這裡,大概就已經完全能滿足需求了。剩下的,只要多留意 CLion 給你的提示即可。
(以下對小白不重要)第一行被注釋了(也許沒有),本來是一個限定最低 CMake 版本的指令。底下是聲明項目名稱。set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}
-std=c++11") 是更改編譯器標識,比如默認是附加了按照C++11標準編譯的標識,你可以安全地改成c++14,或者想復古,改成c++98等。注意到這是C++編譯器的標識。如果是純C,也可以指定C_FLAGS
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c11")等等。理論上所有flags都可以在這裡指定,但是某些有更優雅的方法。一個例子是這個回答 CLion 鏈接庫?如 lpthread 怎麼設置? - 軟體開發。
它沒有直接add_executable,而是定義了一個變數SOURCE_FILES,然後用這個變數去add_executable。所有存在的 CMake 變數可以在 CMake 工具窗口的 Cache 一欄查看:
當你新建一項(類/源文件/頭文件)的時候,它會提示你是否要添加到某個target中。當然你也可以
不選,然後手動添加,如果你會初級的CMake(並不難)。
對於新建的頭文件,它會自動給你建好 guard,具體內容也可以在設置里改。
調試什麼的,就是給gdb做了個前端,中規中矩。然後在代碼旁邊打出當前變數的值,這也是JetBrains系統的標配。
整個體驗就是JetBrains那一套很友好的東西,比如所有 action/setting 都是可搜索的,隨時快捷鍵查找文件、符號等。特別是雙擊 Shift,什麼都能找
唯一的問題就是你需要一些性能。可能是因為做了複雜的分析,CLion(相比 IntelliJ IDEA 等)更加吃內存和 CPU,默認的 JVM 堆大小是 2G,而索引的時候常常會吃滿 CPU(見下圖):
================
====測評的分割線======
================
好,說好的測評時間。開篇的對比,為了避免空口無憑,我們做一些具體項的測試:
因為這邊網不好,VS 15
Preview 3 以後的在線安裝包安裝不了,VS 這邊就選用有離線安裝包的 VS
15 Preview 2(是 VS 15,不是 VS 2015 = VS 14,以下請注意區分)。CLion 版本是 2016.2。都是全新安裝。
為了觀感統一,我把兩者的配色都調成儘可能一樣的了。(我喜歡給每一類 token 一種色系,比如關鍵字紅色,函數綠色系,變數黃色系,類型藍色系,實際上是基於 Monokai 細化的,這樣一看就知道代碼的結構了。)
CLion 的配色界面:
VS 的配色界面:
注意 VS 無法設置斜體,也沒有修飾效果(比如下劃線,刪除線等)。VS 的配色界面是沒有整體預覽的。
下面進行解析力測試(以下皆左 CLion,右 VS):
整體看起來差不多,也說明了 VS 15 還是比較現代的。細節處的不同隱喻了 VS 的一些坑,後面再細說。總而言之,兩者的高亮區分主要有這些不一樣的地方:
- CLion 區分了 Typedef,Enum 和 Class,而VS沒有
- VS 區分了模板類和普通類,CLion 沒有
- VS 區分了成員函數、靜態成員函數和全局函數,CLion 沒有
- VS 區分了欄位和靜態欄位,CLion 沒有
- CLion 區分了重載運算符,VS 沒有(也許有)
格式化方面,其實 VS 沒什麼問題了現在。我記得當年 VS 2013 的體驗是很差的,但是 VS 15 足夠稱得上現代了(VS 2015 不知道,裝著 ReSharper C++,不想測)。
兩者都能正確格式化,在輸入代碼的時候也會正確自動格式化(VC 6 就會有蜜汁縮進)。
其實 VS 15 還是比較標準的。這應該是微軟轉型的一步棋,一如用友好的方式開源 .NET Core。(雖然 Preview 2 版本還是默認預編譯頭)。VS 15 默認模板是 main ,而不是 _tmain,看起來也不強制你使用 scanf_s。這個似乎應該歸功於 CRT 的進一步標準化?我記得 VS 2015 還需要 #define _CRT_SECURE_NO_WARNINGS 來著,VS 15 已經不需要了。
我們注意到以上兩圖中,CLion 的那邊經常會出現一些標為灰色的、或者帶有波浪下劃線的內容,而 VS 卻沒有任何提示。這是 CLion 多給的提示。具體而言,CLion 會提示
- 未使用的變數、函數
- 可能未初始化的局部變數
- 循環中未更新循環條件
- 無限循環
- 不可達代碼
- 一些可以簡化的地方,比如某些 if -&> 三目表達式
- 拼寫檢查(支持駝峰、下劃線等命名風格)
- 字元串中不正確的 escape
- 不正確的 printf/scanf 族函數的格式字元串
- ……
以上 VS 都無動於衷,可以在以下專門的對比圖,以及幾乎所有的對比圖中驗證,或者自行驗證。
特別這種 scanf 族的格式錯誤(忘記取地址),是初學者經常容易陷入的。
再來一圖:
VS 只提示了不正確的 else。當然,CLion 也沒有覺得沒有 body 的 if 有問題,這是個遺憾。
未使用的包含文件,在 CLion 里也會被標灰,而 VS 一如既往地無動於衷。(隨便在網上找了一段 OI 代碼,注意到那個宏也是 unused)。
不過,這個應該跟 Alt+Enter 自動導入符號是一套機制,因此就會有同樣的坑。比如在 gcc 的標準庫 libstdc++ 里,std::string 實際上是在 stringfwd.h 裡邊兒,所以它可能提示你 include 這個文件,而不是標準的 string。同樣地,由於 libstdc++ 的 iostream 間接包含了 stringfwd.h,所以你只包含 iostream(甚至是 iosfwd?)就能用
std::string 了,而 string 這個(為了跨編譯器)應當包含的頭文件卻可能被標灰。這可能導致困惑,所以見仁見智了。
接下來是模板和面向對象:
注意到 CLion 的右側行號旁邊,標註出了類和方法的繼承/覆寫關係,而 VS 沒有。注意到 Derived 模板中,VS 對於 value 的標註是灰色的。Derived 的構造函數調用的 Base&
當然類似的問題對於非模板代碼,VS 還是能發現的。
VS 15 似乎不支持 auto 參數,因此給了報錯。CLion (打開了 std=c++14)支持,但是不能在懸浮的時候推導出變數類型。對於 auto lambda,兩者都能推到出返回值類型,但是加入了模板元編程後,CLion 歇菜了,而 VS 居然能正確推導出返回值類型(f2 是 long, f3 是 float)。
甚至對於值模板、乃至於對值特化的值模板都照推不誤(funcRet4 是 int, funcRet5 是 const char *),令人嘆為觀止,而 CLion 早已敗下陣來。可見 VS 還是有兩把刷子的,這也是 VS 在本次比較中唯一更好的地方。
還有重構之類的,就不比了。VS 從 2015 開始應該提升了不少(可以參考All about C++ Refactoring in Visual Studio 2015 Preview),但是再提升也不會比 Clion(==ReSharper C++) 更好,就沒必要比了。
這些都不是什麼緊要的問題,沒什麼技術含量,相信也不難做。無非是個體驗問題罷了。可是整個 IDE 不就是關於體驗問題么?
其他的還有一些功能,比如之前提到的「Alt+Enter 自動導入符號」,這都是 JetBrains 系列的標配。以及眾多的插件和對 Python 的支持(其實就是 PyCharm)都是很好的(為什麼 C++ IDE 都喜歡支持 Python?)
不過對初學者來說,這些都是次要的。主要還是以上提到的一些內容。寫了一篇微小的教程,謝謝大家。
========================================
說了這麼多,對初學者有多少幫助也說不準。存在這樣的觀點,初學者就應該使用 plain 的文本編輯器,比如notepad.exe,以期或者更多的歷練。這並沒有什麼值得反駁的地方。另一方面,「初學者」的概念也相當含糊,是從哪裡來(比如剛上大學?),又要到哪裡去呢(參加演算法競賽,還是寫軟體?)?問題的背景不可一概而論,沒有一貫的應對方案,因而也無法有過多的企圖。寫這篇東西,徒然在想像中期望為我想像中的初學者帶來一些幫助罷了。
雖然回答的不是你想問的,但作為一名從業者和愛好者,我仍然強烈建議:小白學編程不要從C語言開始。
不知你為什麼希望從小白起步學習C語言?我初步總結了下面幾點可能:
1、掌握一門技能,進軍程序員,掙錢養家
這種情況下,C語言程序員在目前的市場中需求不是非常大,在互聯網和移動互聯網盛行的今天,需求最大的程序員是web前端、後端、安卓、iOS開發。這些都不需要C語言。當然你可能聽說,他們大多數語言的語法看起來有點像C,但是一個語言的精髓遠遠不是語法,掌握了語法只是皮毛。
2、業餘愛好,感覺很酷,鍛煉思維、追妹子
作為業餘愛好學習語言,必須設定一個具體的目標,邊完成編程的目標,邊學習語言。系統性的學習語言,其實是一種低效的方式。更高效的學習方式是帶著目的學,然後不斷升級自己的目的,從而學的更深。多說一句,對於已經有一定編程基礎的非小白,學習新語言的最佳方式,是閱讀、猜測並理解別人優秀的代碼。
3、課程需要,不得不學
據我所知,目前大多數高等學校的編程教學,已經從C語言逐步轉變。而國外的大多數學校,入門語言是Java。
當然,如果學校真的要用C,那你就不會問用VC6還是VS2005,因為老師一定會規定的。
說了上面這些,那接著的問題就是,小白的第一門語言應該是什麼?我個人強烈建議Python,理由有:
1、非常貼近英文,語法簡單漂亮,需要記憶的東西不多
2、強制的縮進格式,非常有助於初學者養成良好的習慣
3、豐富的庫支持,可以用很少的代碼實現複雜的功能
再說回來,C語言可不是沒用,而是太強大了,以至於適合更高級的人。幾乎所有其他的語言,都是用C語言實現的。要想充分理解C,需要從計算機體系結構開始學習,了解編譯的過程,了解內存的結構,了解操作系統,了解C語言的存在,無非是為了幫助人類更快速更便捷的生成彙編代碼。只有理解到這些層次,才能在C語言上有所建樹。
EDIT 3/5/16:
有朋友在留言指出,"C語言的存在,無非是為了幫助人類更快速更便捷的生成彙編代碼。" 這句話不妥。我恍然發現,這句話的確更容易被理解成:C幫人生成彙編代碼,人修改確認提交彙編代碼。但這顯然並不是正確的流程,也並不是我原先想表達的意思,所以為了不「誤人子弟」,稍作解釋。
C語言的編程模型與思路和彙編完全一致;甚至C語言和彙編代碼之間有直接的行與行的對應關係;在C語言的調試中(特別是嵌入式系統和硬體相關的低層驅動),不免需要經常查看編譯出的彙編代碼。因此,「幫助人類更快速更便捷的生成彙編代碼」,我想表達的是:優秀的C程序員本應有能力以與C程序相同的架構和思路用彙編完成同樣的功能,但那樣不僅增添了他們的工作量和錯誤率,更要求他們不得不掌握平台相關的彙編指令,因此C的功能是儘可能排除這些工作量和平台相關性,專心在程序思路本身的實現上。C語言並不能提供超出彙編之外的編程思路與模型。
這可以做如下不恰當的類比:我們用計算器解數學題時,計算器代替了筆算,並且更準確。計算器用多了,我們可能都忘記了怎麼筆算,但我們堅信只要稍加練習,自己仍然會用筆算,也正因為這個認識,我們沒有必要再去做筆算。然而,如果這道題目本身不會做,用計算器並不比用筆算有優勢。C語言正如這個計算器,而其餘高級語言則更像是針對各類型題目的解題公式。我感覺這個不錯 (逃
ccjs v1.2 by Carter Feldman學語言還是要從語言本身學起吧,如果以上來就研究Compile、Makefile、Link什麼的,一會就學不下去了。
所以要從VS2015和VC6.0裡面選的話,還是VS2015吧,畢竟VC6.0是20世紀的產物了。但是在VS使用scanf等函數時會有_CRT_SECURE_NO_WARNINGS的錯誤提示,Google一下原因和解決方案就好。
如果覺得VS比較大的話,用Dev-Cpp、C-Free或者CodeBlocks都好。
等到入門了再去研究所謂高手的那一套也來得及。VS2015 用了之後 你會發現 其它IDE都是什麼鬼。
如果覺得VC6跟VS什麼的太麻煩,龐大~可以用gcc或者clang等編譯器,用自己喜歡的文本編輯器來寫。敲命令行或者寫「馬克」編譯。以下~
//
TDM-GCC/GCC
地址:TDM-GCC : News
Down安裝包下來
開始安裝,第一屏有個檢查更新,去掉那個選擇框,不然牆內勾選那個 後面浪費時間
安裝之後: 敲cmd 總會吧~
gcc -v 可以看到gcc的版本信息~gcc安裝成功
/
先寫個hello text~
建個文本文檔,重命名: FUCK.c,然後呢 你可以選擇你喜歡的編輯框打開、當然系統自帶的記事本也可以咯,個人習慣用Notepad2,你可以試試vim或者Notepad++。
寫個Hello Text咯。
保存之後敲命令行
cd 源文件的路徑
gcc FUCK.c -o FUCK
編譯成功~
開始運行一下
/
這樣今後可能遇到的坑:
如果用普通的文本編輯器,請注意寫程序源碼時候全形字元的坑,跟大小寫拼寫這種事情。
編譯的時候常用參數:
-Wall 開啟盡量可能的警告
-O1 -O2 -O3 三個級別的編譯優化
-lxxxxxx (xxxx為依賴的庫鏈接~)
(例如:-lws2_32)
//
關於編譯器的,還有其他各種好多參數,不用翻牆 用度娘都能搜到~
關鍵詞: GCC 編譯 參數
//
以上如有錯誤 請點沒有幫助~
//下面 可能暫時用不到。!
(補充一下暫時用不到的)關於調試:&>&>
手動調試器下斷點什麼的···沒試過,可以找相關資料~
debug輸出調試信息,可以用OutputDebugString函數
Dbgview這個軟體是可以接受並且列印出調試輸出的信息。
注:在用了 -mwindows 參數之後、好像是沒法用普通的列印輸出函數到控制台的說哦,所以用
OutputDebugString 輸出。
//
再次補充:&>&>(無關緊要的)
由於是手動創建項目,敲命令行編譯,有可能亂糟糟的~
由於不習慣VS之類的項目什麼的,個人的習慣是這樣~
在桌面開個臨時文件夾、要寫新東西的時候 在下級開個文件夾,然後在裡面新建源文件。
這樣手動敲命令行編譯的時候,可以直接拷貝路徑過去編譯了。
當然!你也可以寫個腳本以及批處理之類的快捷編譯、甚至可以自己寫項目源文件管理~但是鑒於你現在(2016-03-02),還是手動管理現實點。/
當然,如果能適應VS或者其他方式的項目管理習慣的話 是最好不過的了。
//
想起了剛開始學編程的時候,老師叫裝eclipse然後用MinGW gcc插件,整個配置過程繁瑣之極,別說什麼編程的樂趣了,當時就是WTF的表情,直到現在依然不能原諒他。
如果真的剛上來就Linux下那一套工具鏈,真的會嚇到人的。
所以我推薦VS或者dev-cpp這樣很容易安裝和上手的工具,等到學個半年一年再去折騰不遲。
有一個軟體叫「啊哈 c」。大概15M,專門用來寫c程序,win下的,純粹作為學習比vs輕巧多了。缺點是寫win窗體程序很不好寫。簡單運行沒問題。很容易搜索到這個軟體下載,免費的。
只支持標準c,不支持c++。
啟動界面像這個樣子:
編輯界面像這個樣子:
另外還有配套的教程:
官方網站:
啊哈磊_編程從這裡起步
此外,還有百度貼吧可以參與討論。
這個軟體應該是最符合題主這樣的初學者的使用的。
這個編譯器的內核應該是基於gcc的,部分人反映說編譯過程有點慢,但是應該不影響題主這樣的初學者使用。
我只想提醒題主:無論VC還是VS,都只支持C++,並不真正意義上支持C語言。
如果你想要學習C++,用VS是完全沒有問題的,VC6不支持新的C++標準,建議不要用。VS比VC6好,重要的事情再說一遍。但若是想學習C的話,VS並不合適。
其實,若你真的想要學習C語言,推薦你用Linux並沒有錯。因為Windows裡面的確已經幾乎沒有多少場合還在用C語言了,幾乎已經全被C++或者其他語言取代。而Linux才是C語言大行其道的地方,所以我需要鄭重的問你:你學C語言究竟是想幹啥?你若是想做一個在C++環境裡面寫C程序的人,我代表C++程序員們鄙視你。
反駁的人請先想想,Windows裡面究竟哪個場合必須要用C而不能用C++?極少,至少是這個問題的題主絕對沒可能遇到的。
如果你真的是要學 C,其實我有幾句更簡單的要教你:
裝任何一個自帶gcc的gnu發行版,是的,就算是裝 cygwin 也行。你可以把 cygwin 理解為在windows上跑的gnu發行版。
用任何編輯器編輯代碼。保存為 foo.c 之類的任意文件名。
用 make foo 這樣的命令進行編譯。對,make 後面帶的參數等於你的源文件名去掉 .c 之後的名字。
用 ./foo 執行你編譯出來的代碼。
無須安裝任何軟體。只要用系統自帶編輯器以及自帶的shell即可。
C 語言程序員是必將與系統底層打交道的程序員,你連命令行都搞不定是不行的。真心建議你學其它語言。新人經常犯的就是這個毛病,在一些毫無意義的問題上糾結,結果糾結來糾結去什麼也沒學會。。。
比如:
linux該選哪個發行版,ubuntu,debian,openSUSE
學習C++開發工具選哪個,dev-c++,vs還是borland C++
編輯器用哪個,vim還是Emacs
其實差不多,建議從vs的c# form編程入手,那玩意最簡單
還有:別去惹mfc。。。
以上是關於學習編程的建議
如果你只是想學c語言,其實qt,dev-c都挺好的,vc和vs的控制台也挺簡單
還有,我覺的你所說的想學c應該約等於想學編程吧。。。
我當年學c的時候用的還是turbo3.0
09年。。
支持 VS 的給我點贊!!!
有最新的工具 (如今最新的是VS2017),幹嘛還要用老的,新的一定會兼容老的,反過來並不是如此。VC6 太過時了,無論是編程體驗還是對你今後的工作,都沒有任何太過積極的意義。試想一下,你還在VC6中被一個環境設置問題卡住無法進展的時候,最新的VS2017早就輕而易舉的解決了這個問題或者換了一個地方,你以前為處理那些梗而付出的努力是不是就像一江春水向東流,都白費了。
還有力推 Linux 的那幫人,我不清楚是不是你們覺得用 Linux 可以讓自己顯得高逼格一些,Linux下任何操作都得用命令 (別提圖形化的工具了,用戶體驗極差),想搭建個開發環境,就得一行行的敲命令,yum update, install, 裝好了 gcc, 還得裝 gdb, 不然還得弄個g++, 然後呢?沒法編譯,因為沒設置環境變數,好了去設置環境變數吧,好了一切弄好了,開始寫代碼,咋寫?用 vim, 插入保存換行,你都得記住這些命令,記不住?記在小本子上!然後弄了個工程,有10幾個文件需要編譯?咋整?寫 makefile 吧。
看見了么?還沒開始搞C語言,Linux 環境都得先把初學者弄懵逼。
VS多麼好的 IDE 啊,有人幫你搞定了一切的環境問題,在這裡你安心的編程就好了。也許有人說,VS 把一切都包進去,讓開發者有時覺得太傻瓜了,不夠透明,那麼我想說,你已經不是初學者了。
高手們直接去用Linux好了,VS 真的很適合初學者。
不推薦初學者用Linux系列,因為以初學者的水平根本還不到要挑戰c標準的地步。何況Linux的c也是很多不符合c標準的,c標準就是一群學院派老頭子定下的死規矩,其中槽點無數,Linux那群信仰自由的黑客們哪會待見c標準這種學院派腐朽的蠢東西?
我記得gcc里埋了很多嘲笑c標準的彩蛋,Linux 的c語言里也有很多擴展(其實就是對c標準的違反)
微軟的IDE環境對編碼體驗是考慮得最周全的,畢竟商業公司,對初學者來說操作圖形化界面比操作命令行更易記,也更直觀更便捷,所以還是推薦用最新的VS2015,你用Linux的編程界面,都是最原始的黑屏白字,滑鼠都不能用,vim要記一大堆控制鍵,編程體驗太糟糕了。
其實推薦初學者用source insight作為代碼編輯器,專註編碼體驗,比VS系列更好。
推薦閱讀:
※Excel 有哪些可能需要熟練掌握而很多人不會的技能?
※Windows XP 已經過時但佔有率仍很高,這是否給桌面軟體開發者帶來了一些麻煩?
※為什麼 Windows PC 有超高的市場佔有率,但平板的反響平平?
TAG:程序員 | 編程語言 | 編程 | Microsoft Visual Studio 2015 | vc6.0 |