毫無編程基礎的小白準備學習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。

  1. 在瀏覽器地址欄輸入 http://tdm-gcc.tdragon.net/ 進入 tdm-gcc 主頁

  2. 點擊 Download 進入下載頁,根據系統的位數選擇對應的版本。操作系統的位數可以在「控制面板 —— 系統」中看到

  3. 安裝,點 Create,一路 Next,等待安裝完成

  4. 此時你在 C: 底下應該能看到一個類似這樣的文件夾,看到的話就表明安裝成功了

  5. 此時打開 Powershell(開始菜單里直接可以找到),輸入 gcc,應該可以看到這樣的提示,TDM-GCC 安裝器會幫你設置好環境變數。

  6. 打開文本編輯器,比如(如 Visual Studio Code)

  7. 保存成 .c 文件(一定要注意「文件名」那兒一定得是 .c 結尾)

  8. 輸入內容,保存

  9. 在資源管理器裡面找到你保存 .c 文件的目錄

    1. 如果你在這裡看到了 hello 後面的「類型」裡面顯示的是「文本文件」或者標誌是記事本的圖標,說明你編輯器保存的時候保存錯擴展名了,請重新保存
    2. 如果你圖標不是記事本,後面的「類型」也不是「文本文件」,但是只顯示了 hello 而不是 hello.c 的話,請在「控制面板 → 文件夾選項/文件資源管理器選項」中,取消勾選「查看」頁內的「隱藏已知類型的擴展名」,如圖

  10. 複製目錄路徑

  11. 在 Powershell 中用 cd 命令進入這個路徑

  12. 在 Powershell 中輸入 gcc hello.c -o hello.exe,這裡第一條下劃線底下是你剛才保存的 .c 文件的名字,第二條下劃線寫的是你打算把編譯出來的程序保存成什麼。如果 gcc 編譯成功,應該就可以看到 exe 生成了:

  13. 運行之,成功。

————————————————————————————————————————————
下面說怎麼在 VSCode 中調試

  1. 打開編輯器,按 F1 鍵打開命令功能,輸入 ext install 並回車,可以顯示擴展安裝菜單。

  2. 繼續輸入 gdb,可以看到一個叫做 Debug 的擴展,按回車安裝之,成功的話 VSCode 會在一會兒之後提示重啟,按他的要求重啟編輯器。

  3. 點擊左側第四個「調試」按鈕,然後點擊「齒輪」按鈕,在彈出的列表中選擇 GDB,啟動 GDB 調試器支持

  4. 此時你應該能看到窗口中顯示了一個叫做 launch.json 的配置文件,並且左側的文件列表中多了一個 .vscode 的目錄,以及 launch.json 的文件。在 .vscode 目錄下新建一個 tasks.json 的文件,然後把兩個配置文件的內容如下設置:
    1. .vscode/launch.json

      {
      "version": "0.2.0",
      "configurations": [
      {
      "name": "Debug",
      "type": "gdb",
      "request": "launch",
      "target": "./out.exe",
      "cwd": "${workspaceRoot}",
      "preLaunchTask": "gcc"
      }
      ]
      }

    2. .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
      }
      }
      }

  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 區分了 TypedefEnumClass,而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 也沒有發現。以上所有問題,CLion 都正確地給出了標註。

當然類似的問題對於非模板代碼,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 |