【開始】
1. 在mac和linux上寫c語言之前,首先要看看是否安裝了編譯器:
在終端下輸入gcc後回車進行檢測,如果安裝過,將提示 clang: error: no input files(沒有輸入檔案);
在centos下直接yum -y install gcc gcc-c++(-y表示將自動選擇y)
2. 現在開始愉快的寫**:
在xcode裡對新建的專案檔案使用command+r就直接編譯執行你的c**了。
在mac終端下,使用神器vim,如:vim test.c ,它不會幫你新建test.c,寫完c**後你需要command+s儲存,然後:wq!退出,使用命令gcc test.c編譯,不指定編譯後的檔名,編譯檔名都將是a.out ,執行它使用./a.out
在linux下,同樣使用vim,輸入vim test.c 的時候就在當前目錄新建了test.c檔案,寫完c**直接:wq!儲存退出,使用gcc test.c編譯,執行編譯檔案./a.out ( gcc -o main.c main.o #生成.o檔案 )
sublime text是一款值得使用的文字編輯器,如果裝好環境,使用cmd+b對**進行編譯,shift+cmd+b執行,但是sublime只能執行乙個程式,如果需要執行有輸入的程式,就必須離開sublime進入到終端。
3. demo:
#include "stdio.h"/*
標準輸入流:鍵盤輸入
標準輸出流:終端輸出
標準錯誤流:錯誤輸出
stdin
stdout
stderr
*/int
main()
else
return
0;
}
重定向:./main.out >>m.txt #執行檔案輸出結果追加寫入到m.txt
./main.out >m.txt #執行檔案輸出結果覆蓋寫入到m.txt
./main.out
./main.out
1>t.txt 2>f.txt < input.txt #輸出流寫入t.txt, 錯誤流寫入f.txt, 輸入流使用input.txt
管道:附:【c語言編譯過程】ls /usr/local/ | grep
binps -e | grep
ssh #將前一條命令的輸出流作為後面命令的輸入流
假如要編譯乙個 1.c 程式為可執行檔案 build,如何看到編譯器的處理過程呢,使用 gcc -v -o build 1.c
1. 預處理
cpp -o 1.i 1.c # 翻譯成.i檔案
gcc -e
2. 編譯,系統用的是cc1
/usr/lib/gcc/x86_64-linux-gnu/4.8/cc1 -o build 1.c
我們可以直接用gcc -s, 相當於幫我們執行上面的過程;
3. 彙編,系統用的是as
as -o build 1.c
我們可以直接用gcc -c,因為系統沒有辦法直接把c程式轉為彙編,所以相當於依次執行了編譯和彙編;
4. 鏈結,系統用的是collect2
/usr/lib/gcc/x86_64-linux-gnu/4.8/collect2 -o build 1.c
我們可以直接用gcc -o,同理,系統幫我們依次執行了編譯、彙編、鏈結。
示例:gcc -e -o 1.i 1.c # 生成預處理檔案1.i,將其中的include和define等替換成其它
gcc -s -o 1.s 1.c # 編譯成1.s 彙編碼檔案,-o選項不能省,只是增加了-s選項
gcc -c -o 1.o 1.c # 編譯成1.o 二進位製碼檔案,給機器讀
由於include和define是預處理階段完成的替換,所以它們並不是關鍵字,關鍵字是編譯器處理的。
( 條件預處理 )
gcc -dabc 相當於 #define abc , 用於除錯中。
示例:
include int編譯時,gcc -dabc -o build 1.c ,-d選項後面直接加常量名,預處理會加入巨集定義。main()
不用命令列定義 array_size 時,值為3:
#include intgcc -o build 1.c -darray_size=2main()
; printf(
"array_size is %d\n
", array_size);
perror(
"error msg");
return0;
}
( 巨集展開下的#, ## )
# 字串化
## 連線符號
#define abc(x) #x // 巨集體相當於字串x,在巨集中想賦值字串的時候使用
#define abc(x) day##x // 巨集體相當於day連線x後的內容
示例:
include #define func(x) #x例2:核心中用例,傳入不同的字尾可以得到不同的值#define par(x) myparam##x
intmain()
#define adm8211_sram(x) (priv->pdev->revision < adm8211_rev_db ? \adm8211_sram_a_ ## x : adm8211_sram_b_ ## x)linux 下我們用man可以看到完整的手冊,如果想看一些常用選項,建議你用 `gcc --help`:#define adm8211_sram_indiv_key 0x0000
#define adm8211_sram_a_share_key 0x0160
#define adm8211_sram_b_share_key 0x00c0
#define adm8211_sram_a_ssid 0x0180
#define adm8211_sram_b_ssid 0x00d4
C 呼叫命令列程式
using system using system.collections.generic using system.linq using system.text using system.diagnostics 執行cmd命令 會顯示命令視窗 指定應用程式的完整路徑 執行命令列引數 static ...
如何debug命令列程式 C
常用的2種方法 方法1在main 函式剛開始,加入如下 1 static int main string args 2 這樣能讓程式在此停住,等待輸入。此時便可以在vs中attach上該程式,開始debug。此方法在需要debug各種引數時比較方便。方法2直接在vs中開啟project proper...
在程式裡呼叫命令列程式
在程式裡呼叫命令列程式,一位cnblog的仁兄寫的 process早就有辦法了,只不過我沒有注意.如呼叫乙個命令列 cmd c dir c winnt 把結果放到乙個字串裡.processstartinfo psi new processstartinfo cmd c dir c winnt psi...