1>添加環境變量 export PATH = $PATH:`pwd`
如果此時關閉終端,所設的環境變量將失效;另外可以直接修改用戶目錄下的.bashrc文件,接着關閉終端重啓即可。
2>GCC 使用
GCC的編譯流程分爲4個步驟:1】預處理(PreProcessing)2】編譯(Compiling)3】彙編(Assembling)4】連接
(Linking);
1.預處理,生成.i的文件[預處理器cpp]
2.將預處理後的文件轉換成彙編語言,生成文件.s[編譯器egcs]
3.有彙編變爲目標代碼(機器代碼)生成.o的文件[彙編器as]
4.連接目標代碼,生成可執行程序[鏈接器ld]
$gcc -E test.c -o test.i -E激活預處理
檢查語法錯誤,並生成彙編文件 -S激活預處理和編譯,就是指把文件編譯成爲彙編代碼。
$gcc -S test.c -o test.s 對於研究程序效率是非常有幫助的。
3>Makefile
變量定義的兩中方式
遞歸展開方式 VAR= var 可以向後引用變量但不能對變量進行任何擴展 如 CFLAGS = $(CFLAGS) -O就成了死循環
簡單方式 VAR:=var 會在變量的定義點按照被引用的變量的當前值展開 如CFLAGS=cc; CFLAGS:=$(CFLAGS) -O就不會造成
死循環。
用?=定義變量 查找前面是否已定義次變量 如 dir:=/foo/bar
FOO?=bar
含義是,如果FOO沒有被定義過,那麼變量FOO的值就是bar,反之,這條語句將什麼也不做,其等價於:
ifeq($(origin FOO),undefined)
FOO = bar
endif
4>autotools工具的使用
5>編寫程序,從鍵盤上輸入2個整數,分別計算出它們的商和餘數,輸出時,商數要求保留2位小數,並對第3位進行四捨五入。
int main(void)
{
int x,y;
scanf("%d,%d",&X,&y);
printf("%5.2f",(double)x/y,x%y);
return 0;
}
這裏我們要弄清楚一個原則:當一個運算符兩端的運算量類型不一致時,按“向高看齊”的原則對“較低”的類型進行提升。
這道題目如果我們改寫成下面的語句:
2】printf("%5.2f",(double)(x/y,x%y));
將會發現運算結果發生了變化。其原因是因爲(double)x/y先將x強制轉換爲double型,接着x/y根據向高看齊原則,x/y爲double/double;再看2】中的(double)x/y,是先將x/y取整,再將所得到的整數強制轉換爲double型,因此我們在處理數據時要十分小心使用括號。