2015年12月9日 星期三

使用 Notepad++ 編譯 C 語言、 C++ 、 Java --從零開始。(輕便、簡單、快速、可攜)



廢話般的前言

想必許多人開始接觸程式時,不外乎是從  C 語言、 C++ 、 Java 等的基礎語言開始學起。

接觸程式語言前最重要的部分就是編寫程式語言的 IDE (Integrated Development Environment ,整合開發環境 ),也就是寫下程式、編譯程式的地方。

寫程式如同寫書法,而 IDE 就如同毛筆,一隻好的毛筆能讓人有舒適的書寫體驗,而一個優良的 IDE 可以帶來簡易上手的 Coding 體驗。



......讓我們談談 Visual Studio 吧。


Microsoft Visual Studio(簡稱VS)是微軟公司的開發工具套件系列產品。
VS是一個基本完整的開發工具集,它包括了整個軟體生命周期中所需要的大部分工具,如UML工具、代碼管控工具、整合式開發環境(IDE)等等,所寫的目的碼適用於微軟支援的所有平台......

很好,就此打住。


不知道為什麼,許多學校在一開始教程式時都優先讓學生使用 Visual Studio 中的 Visual C++,甚至有學校是「指定」學生只能用 Visual C++。

最近還聽說過有人除了用 Visual C++ 之外都不知道該如何 Coding,最後導致剛得手的大好工作丟失的例子...

WTF?

先不論上面例子的真實性,我身邊倒是真的有不少除了 Visual Studio 外不知道有其他 IDE 能編寫程式的人在,讓上面的例子更加貼近了現實。

如果是剛開始學習程式,真的需要一整套可能用不到的專案套件軟體?


開始打這篇文章的前一天,剛好有人在問我 Visual C++ 2008 該去哪裡找,原因是學校指定要用...

唉,不知是從什麼時候開始,我們身旁的東西都被 Microsoft 綁得死死的,OS 也就算了,Office、Browser (想想過去有多少人只會用 IE),難道連 IDE 都要被 M$ 綁死?



比較

IDE 占用容量:
Notepad++ 與 MinGW 等雜項 (300 MB 以下)
< Visual C++ Express 2010 (近 1GB)
<< Visual Studio 2010、2013、2015 (7.x GB 以上)

占用效能:
Notepad++ < Visual C++ Express 2010 << Visual Studio 2010、2013、2015

程式編譯後占用大小:
Notepad++ (只有編譯 Source Code)
<< Visual C++ Express 2010 = Visual Studio 2010、2013、2015 (建立整個專案)

操作複雜程度:
Notepad++ < Visual C++ Express 2010 = Visual Studio 2010、2013、2015

Coding 友善程度:
Notepad++ = Visual Studio 2013、2015 > Visual C++ Express 2010 = Visual Studio 2010


(註: 占用效能部分可能會因使用硬體較佳電腦而無感,但使用小筆電或 Windows 平板的感受就相當明顯)

(註2:目前尚未比較 Notepad++ 與 Visual Studio 2015 在 Coding 時的感受,但相信與 2013 版相差不大,希望有人舉列修正)

(註3:Code::Blocks 與 Dev-C++ 也不錯,但比較後依舊偏好 Notepad++,大家可以嘗試看看)

以下正文,開始教大家如何使用 Notepad++ 當作簡易 IDE。



正文


圖01. Notepad++ 官網

步驟 1. 到 Notepad++ 官網下載程式

https://notepad-plus-plus.org/

Notepad++ 不僅免費且開源,輕巧好用,更棒的是官方有釋出可攜帶式( Portable )版本,讓你可以解壓縮後放在隨身碟,方便到處奔波的人使用。

左方的 download 按下去吧!
(左上方有你我熟悉的旗幟,沒錯,Notepad++ 官網是有繁體中文的)


圖02. 下載 Notepad++

根據自己的需求選擇下載的版本,若想用可攜帶式的請下載 zip 格式或 7z 格式。

基本上,下載第一個安裝程式即可。

步驟 2. 安裝 Notepad++

圖3. 安裝 Notepad++

基本上不要理會選項,無腦按下一步即可。


圖4. Notepad++

*若打開後為英文,打開程式後可至 『Setting』 -> 『Preferences』 -> 『General』 ->  『Localization』 中更改語言


圖5. 更改語言

步驟 3. 下載 Plugin--NppExec

到 『外掛模組』 -> 『Plugin Manager』 -> 『Show Plugin Manager』,下滾找到 『NppExec』 後點選 『Install』
圖6. 安裝 NppExec 
安裝完成後,到『外掛模組』 -> 『NppExec』檢查是否安裝完成。

圖7. 安裝 NppExec 完成



步驟 4. 配置系統環境

此步驟會依不同的程式語言而有所差異,在這裡分開講解。
(兩個可以一起做)

Java:
步驟 4.1下載與安裝 JDK(Java SE Development Kit)

基本上每個學過 Java 的人,第一堂 Java 課就是學習如何配置 Java 環境,若你已建構好此環境的大可直接略過。

首先,到這裡 下載我們所需要的 JDK

圖8. 下載 JDK

接著,點選 『Accept License Agreement』,版本任意選擇,基本上下載新的最好。

再根據自己系統的架構選擇下載類型,由於我的電腦是 Windows 64 Bit,固然選擇 Windows x64。

圖9. 同意與選擇下載 JDK

安裝時無腦下一步即可。

圖10. 安裝 JDK

步驟 4.2 在系統中配置環境變數

打開『檔案管理器』 -> 空白處按下滑鼠右鍵 -> 『內容』

圖11. 呼叫進階系統設定

接著,『進階系統設定』 -> 『環境變數(N)...』

圖12. 呼叫環境變數設定

找到『系統變數』中的『Path』,點選『編輯(I)...』

圖13. 編輯系統環境變數

按下『新增』,接著填入你剛才安裝 JDK 的位置中的 bin 資料夾
預設位置為『C:\Program Files\Java\你安裝的 JDK 版本\bin』

圖14. 更改系統環境變數

接著,請重新開機

恭喜,Java 環境配置完成。

若想確認是否完成環境設置,可使用 cmd 輸入 javac,若跳出指令提示而非『找不到指令』,代表環境配置已完成。

(豆知識:系統變數就是你在系統中呼叫指令的位置)


C 語言 / C++:
步驟 4.3下載與安裝 MinGW

此部分需下載 MinGW 協助我們安裝 GCC Compiler 與 G++ Compiler,點選這裡
點擊右上角的『Download Installer』後,等待幾秒連結到 sourceforge.net 自動下載。

圖15. 下載 MinGW

點開檔案後,大膽按下 『Install』,再按下 『Continue』安裝。

圖16. 安裝 MinGW

安裝完成後會自動執行程式,點擊左邊的『Basic Setup』

將『mingw32-base』與『mingw32-gcc-g++』接按下滑鼠右鍵 -> 『Mark for Installation』
(兩個都要!)

圖17. 選取 gcc-g++ compiler
按下左上角『Installation』 -> 『Apply Changes』
跳出確認視窗後,按下『Apply』


圖18. 應用所選

安裝完成後,按下『Close』離開,即可關閉程式。

圖19. 關閉 MinGW


步驟 4.4 在系統中配置環境變數

步驟4.3 但最後在 Path 的路徑改為 『C:\MinGW\bin』(你安裝 MinGW 的 bin 資料夾)即可。

圖20. 添加位置至環境變數


接著,建議重新開機

恭喜,C語言/C++ 的環境配置也完成了。

若想確認是否完成環境設置,可使用 cmd 輸入 gcc 或 g++,若跳出指令提示而非『找不到指令』,代表環境配置已完成。

(豆知識:系統變數就是你在系統中呼叫指令的位置)




步驟 5. 建立程式碼編譯腳本

首先,我們先到 『外掛模組』->『NppExec』,按下『Follow  $(CURRENT_DIRECTORY)』,讓程式可以跟隨到檔案的位置。
這一步很重要!

圖21. 設定檔案路徑跟隨
照圖.19 按下 『外掛模組』->『NppExec』->『Execute...』

圖22. 開啟『Execute...』



圖23.『Execute...』視窗

這裡放入我們執行編譯時所下的指令,會依程式語言的不同而有所差別,請務必注意。

Java:
cd $(CURRENT_DIRECTORY)

javac $(FILE_NAME)

java $(NAME_PART)


圖24. Java 用指令

C:
cd $(CURRENT_DIRECTORY)

gcc -o "$(FILE_NAME).exe"  "$(FILE_NAME)"

$(NAME_PART).exe


圖25. C 用指令(腳本已更正,不建議照圖打)


C++:
cd $(CURRENT_DIRECTORY)

g++ -o "$(FILE_NAME).exe"  "$(FILE_NAME)"

$(FILE_NAME).exe


圖26. C++ 用指令(腳本已更正,不建議照圖打)


隨後,按下一旁的『Save...』儲存腳本,記得幫腳本一個可以簡單辨認的名稱。

圖27. 命名腳本

另外,可儲存多個腳本,如圖所示。

圖28. 多組腳本


基本上,按下『OK』時就能執行腳本了,但這不太方便使用,且若有多個腳本要執行時要一一切換,相當麻煩。

因此,下一步驟讓我們自訂執行腳本的快捷鍵。


註:
此編譯腳本為編譯後自動執行腳本,若想分為編譯與執行兩個腳本,可將指令分開存成腳本。

以 C++ 的做舉例。

編譯:
cd $(CURRENT_DIRECTORY)

g++ -o "$(FILE_NAME).exe"  "$(FILE_NAME)"


執行:
cd $(CURRENT_DIRECTORY)

"$(FILE_NAME).exe"


C 與 Java 的方法類似,請自行領會。

(提醒一點,javac 是編譯 java 程式碼的指令,相信不難懂)




步驟 6. 自訂編譯快捷鍵

到『外掛模組』->『NppExec』,按下『Advanced Options...』

圖29. Advanced Options


在左下角有『Associated script:』,選擇一個你想新增成快捷鍵的腳本。

新增完成後按下『Add/Modify』。

圖30. 新增快速鍵輔助

按下『OK』後會出現提示,重新啟動 Notepad++ 即可。

圖31. 重啟提示


若有多個腳本,可以重複以上操作後再重開 Notepad++。

重新開啟 Notepad++ 後,點擊『自訂』->『快速鍵管理』


圖32. 快速鍵管理

按下『Plugin commends』後下滾,可以找到剛才新增的腳本。


圖33. Plugin commends


點兩下後就能設定快捷鍵,這裡可依自己喜好而定,但要注意是否有與其他快捷鍵重複,否則設定了也沒用。

在這裡分享我自己的設定:

圖34. 設定分享

完成後按下『Close』離開。



步驟 7. 測試成品

現在任意輸入你的程式碼,測試看看這個 Notepad++ 的強大性!

輸入程式碼之前,先設定程式語言。

圖35. 設定程式語言

讓我們試看看吧!

圖36. 測試


經過以上步驟,你的簡便 IDE 已經完成了,剩下就是摸索這個 Notepad++ ,好好探索變換主題Coding Style 修改暢玩各式 Plugins ...

好好享受吧!

圖37. 個人之前在玩某塊開發版時,由於受不了該公司所制的 IDE 時常死當的問題,因此決定用 Notepad++ Coding,原本的 IDE 單純當 Compiler 用,讚嘆 Notepad++。





步驟 8. 如何製作可攜版?

把 Notepad++ 免安裝版依照上面步驟即可(不用作步驟4. ),就可以放在隨身碟帶著走。

前提是,使用的電腦有架好環境設置 。

(要求寫 Java 卻沒架 Java 環境,這也未免太...)

若想連 Compiler 也可攜,這可能需要讀者自行研究,若個人有進一步發現,會在這裡分享給各位。





廢話般的結尾

個人上  Java 課時,總會帶這套自己做好的 Notepad++,由於比起用 Window 內建的記事本 Coding 好上太多,導致隨身碟常常要借給一堆人,或許這就是打這篇文章的動機。

(註:老師是不希望修課同學被某些 IDE 綁死,導致更換其他環境打不起 Java,才讓同學使用記事本來寫 Java)

(說真的,用記事本來 Coding 還真是 #@$!#%#@$)

(我寧可用 vim !)

圖38. Linux 系統的 Vim 文字編輯器


2015/12/5 臺灣 傍晚
yyyy/mm/dd



2016/02/28 補充:

前幾天把 Unity 5.1.2 更新到 Unity 5.3.x 時,沒仔細看每個步驟就傻傻按了 NEXT,重開機後電腦就自己安裝 Visual Studio 2015,1x GB 的空間就去了,WTF

雖然說 VS 有不少強大的實用功能,但原本內建的 monodevelop 在大部分的時候也夠用了不是嗎...

2016/10/28 補充:

感謝 Willy Hsu 大大的留言,部分腳本已更正。

另外,剛剛發現有幾篇留言被 blogger 判定為垃圾留言,十分抱歉。

2016/12/01

經友人測試後發現編譯腳本不能用,現已修正。

2016/12/06
首圖掛了,改用其他方式放圖片上去
在步驟 4.4中,配置好 C/C++ 環境後,從「請重新開機」改為「建議重新開機」。
(幫自己的另一台電腦測試後,發現不重新開機也可直接使用,請各位自行測試。)

31 則留言:

  1. 測試C檔案,出現以下錯誤:

    gcc -o testForC.exe testForC.c
    CreateProcess() failed with error code 2:
    系統找不到指定的檔案。

    testForC.exe
    CreateProcess() failed with error code 2:
    系統找不到指定的檔案。

    回覆刪除
    回覆
    1. 檢查環境變數部分是否設置正確,並確認能否執行。
      可以在 cmd 中輸入 gcc 檢查,若有設置成功會提示
      『gcc: fatal error:no input files』。
      另外,c/c++ 部分之環境變數設置完畢後,須重新啟動系統才能正常運作;java 則設置完畢後即可立刻使用,無須重啟。

      刪除
    2. Hi請問一下,我測試C的時候也是出現下列問題,有確認過cmd內是可以執行gcc的,能否幫忙看看問題可能出在哪呢?謝謝

      Current directory: D:\C_codeing
      gcc -o test1.exe test1.c
      Process started >>>
      c:/mingw/bin/../lib/gcc/mingw32/5.3.0/../../../../mingw32/bin/ld.exe: cannot find -lpthread
      collect2.exe: error: ld returned 1 exit status
      <<< Process finished. (Exit code 1)
      test1.exe
      CreateProcess() failed with error code 2:
      系統找不到指定的檔案。

      刪除
  2. 你好,我在 cmd 中輸入 gcc 檢查,有成功顯示
    『gcc: fatal error:no input files』

    但我還是出現錯誤:
    #include
    CreateProcess() failed with error code 2:
    系統找不到指定的檔案。

    main()
    CreateProcess() failed with error code 2:
    系統找不到指定的檔案。

    {
    CreateProcess() failed with error code 2:
    系統找不到指定的檔案。

    printf("hello,world\n");
    CreateProcess() failed with error code 2:
    系統找不到指定的檔案。

    }
    CreateProcess() failed with error code 2:
    系統找不到指定的檔案。

    請問是甚麼問題呢,謝謝

    回覆刪除
  3. 測試C++ 出現這樣:

    NPP_EXEC: "C++"
    CD: C:\Users\Tony\Documents\Programming
    Current directory: C:\Users\Tony\Documents\Programming
    gcc -o new 1.exe new 1.c
    Process started >>>
    gcc: error: 1.exe: No such file or directory
    gcc: error: new: No such file or directory
    gcc: error: 1.c: No such file or directory
    gcc: fatal error: no input files
    compilation terminated.
    <<< Process finished. (Exit code 1)
    new 1.exe
    CreateProcess() failed with error code 2:
    系統找不到指定的檔案。

    已確認cmd gcc
    gcc: fatal error: no input files
    compilation terminated.

    回覆刪除
    回覆
    1. 作者已經移除這則留言。

      刪除
    2. "new 1"之間有空格。
      腳本裡
      g++ -o $(NAME_PART).exe $(NAME_PART).cpp
      改成
      g++ "$(FILE_NAME)" -o $(NAME_PART).exe

      刪除
    3. 感謝樓上回覆,看來我要修正一下腳本的內容了

      刪除
    4. 不好意思,我改成樓上的腳本問題還是存在,還有其他可能的原因嗎?

      刪除
  4. 編譯:
    // Fig. 2.3:fig02_03.cpp
    // Printing a line of text with multiple statements.
    #include //allows program to output data to the screen

    // function main begins program execution
    int main()
    {
    std::cout <<"welcome";
    std::cout <<"to c++!/n"
    }// end function main



    結果:
    CD: D:\編譯器
    Current directory: D:\編譯器
    g++ -o 測試.exe 測試.cpp
    Process started >>>
    測試.cpp: In function 'int main()':
    測試.cpp:10:1: error: expected ';' before '}' token
    }// end function main
    ^
    <<< Process finished. (Exit code 1)
    測試.exe
    CreateProcess() failed with error code 216:
    此版本的 %1 與您執行的 Windows 版本不相容。請檢查電腦的系統資訊,然後連絡軟體發行者。

    是發生什麼??>< 我下載錯版本??電腦是64位元,照這邊下載的。
    已確認cmd gcc
    gcc: fatal error: no input files
    compilation terminated.
    已確認cmd gcc
    g++: fatal error: no input files
    compilation terminated.

    回覆刪除
  5. 請問一下 執行c語言時正常 只要執行C++ 就會跑出 不支援的16位元應用程式 視窗 然後無法編譯 這我該怎麼解決 我是使用win10 64bit surface pro 4

    回覆刪除
    回覆
    1. 不太明白你的問題,方便截圖「不支援的16位元應用程式」的視窗嗎?

      刪除
    2. https://drive.google.com/open?id=0B0uvPWs2_5OiZlFCaU5QQ29yalk

      刪除
    3. 重作步驟4.3試試,我猜有可能在該步驟出了問題

      刪除
    4. 請問最後有解決嗎 我也出現這樣的問題

      刪除
    5. 請問最後有解決嗎 我也出現這樣的問題

      刪除
  6. Hello, 感謝您的分享, 已經能夠用notepad++ compile C!
    我想請問一下notepad++可否debug呢?
    我稍微google一下似乎不行?
    假如是這樣的話我想請問您是怎麼debug? 還是回到visualstudio嗎?
    Thank you

    回覆刪除
    回覆
    1. 若您是指程式普通 Debug (像是常見的少「;」等等語法錯誤)的部分,個人是直接看 Compiler 的錯誤訊息,進而大略推敲錯誤位置(相信大部分的人也是如此);邏輯 debug 的部分要看每個人思考的角度,不太好解釋...

      至於逐行執行、變數數值、指標位置的部分可能要找 Visual studio 了

      個人建議把它作為最簡單的編寫環境,如基礎練習、演算法測試等等,做專案最方便還是用 IDE 為宜:)

      刪除
  7. 測試c++出現這樣▼


    CD: A:\user\meeting
    Current directory: A:\user\meeting
    g++ "1060102.cpp" -o 1060102.exe
    Process started >>>
    c:/mingw/bin/../lib/gcc/mingw32/5.3.0/../../../../mingw32/bin/ld.exe: reopening 1060102.exe: Permission denied

    c:/mingw/bin/../lib/gcc/mingw32/5.3.0/../../../../mingw32/bin/ld.exe: final link failed: Permission denied
    collect2.exe: error: ld returned 1 exit status
    <<< Process finished. (Exit code 1)
    1060102.cpp.cpp
    CreateProcess() failed with error code 2:
    系統找不到指定的檔案。

    請問是什麼問題呢?

    回覆刪除
    回覆
    1. 我也有遇到這個問題
      後來我開Notepad++時,點右鍵選"以系統管理員身分執行" 就OK了

      刪除
  8. 測試Java出現這樣>>
    NPP_EXEC: "Java"
    CD: C:\Users\Princ\Desktop
    Current directory: C:\Users\Princ\Desktop
    javac testJ.java
    Process started >>>
    testJ.java:1: error: class testForJava is public, should be declared in a file named testForJava.java
    public class testForJava {
    ^
    1 error
    <<< Process finished. (Exit code 1)
    java testJ
    Process started >>>
    錯誤: 找不到或無法載入主要類別 testJ
    <<< Process finished. (Exit code 1)
    ================ READY ===============

    回覆刪除
    回覆
    1. 主類別名稱和檔名不同,您檢查一下

      刪除
  9. 請問一下
    在測試gcc後顯示
    gcc:fatal error:no input files
    compilation terminated.
    回程式測試則是
    CD: D:\_backup81\Desktop
    Current directory: D:\_backup81\Desktop
    gcc -o "new 1.exe" "new 1"
    Process started >>>
    new 1: file not recognized: File format not recognized
    collect2.exe: error: ld returned 1 exit status
    <<< Process finished. (Exit code 1)
    new 1.exe
    CreateProcess() failed with error code 2:
    系統找不到指定的檔案。

    是哪出了問題

    回覆刪除
    回覆
    1. 看起來像是檔案名稱出了問題,您的檔案是不是沒有 .c 的副檔名呢?

      刪除
  10. 作者已經移除這則留言。

    回覆刪除
  11. 您好,不好意思,請問一下。
    我測試gcc後顯示
    gcc:fatal error:no input files
    compilation terminated.

    我在腳本中打的內容是
    cd $(CURRENT_DIRECTORY)
    g++ "$(FILE_NAME)" -o $(NAME_PART).exe
    $(NAME_PART).exe

    然後執行後在console顯示的訊息是
    CD: C:\Program Files (x86)\Notepad++
    Current directory: C:\Program Files (x86)\Notepad++
    g++ "change.log" -o change.exe
    Process started >>>
    c:/mingw/bin/../lib/gcc/mingw32/5.3.0/../../../../mingw32/bin/ld.exe: cannot open output file change.exe: Permission denied
    collect2.exe: error: ld returned 1 exit status
    <<< Process finished. (Exit code 1)
    change.exe
    CreateProcess() failed with error code 2:
    系統找不到指定的檔案。

    想請問所謂的Permission denied該怎麼處理?

    回覆刪除
  12. 您好,不好意思,請問一下...
    跑完之後沒有列印出我打的字串,
    也沒有顯示錯誤,
    但就是看不到結果...@@
    請問要怎麼處理?
    NPP_EXEC: "C"
    CD: C:\Users\judy\Desktop\C語言
    Current directory: C:\Users\judy\Desktop\C語言
    gcc "C2-1.c" -o C2-1.exe
    Process started >>>
    <<< Process finished. (Exit code 0)

    回覆刪除
  13. #include
    int main(){
    int integer1,integer2;
    printf("Please enter the first integer: ");
    scanf("%d", &integer1);
    printf("Please enter the second integer: ");
    scanf("%d", &integer2);
    return 0;
    }

    ===========

    CD: C:\Users\重夢\Desktop\vscode
    Current directory: C:\Users\重夢\Desktop\vscode
    gcc -o "Untitled-1.c.exe" "Untitled-1.c"
    Process started >>>
    <<< Process finished. (Exit code 0)
    Untitled-1.exe
    Process started >>>
    1
    2
    Please enter the first integer: Please enter the second integer: <<< Process finished. (Exit code 0)
    ================ READY ================


    為什麼他執行的順序沒有照我下的程式碼運行?

    回覆刪除
  14. 因為很討厭VS寫C++還要開專案,很煩!!!!!!!!!!
    自己去弄套codeblocks來玩玩,覺得也不錯呢

    回覆刪除