c語言核心技術 二

來源:互聯網
上載者:User
作者:劉旭暉 colorant@163.com轉載請註明出處 http://blog.csdn.net/colorant/

================================================

malloc 和 calloc

calloc會把分配出來的記憶體中的每一個位元組都初始化為0, 這可以保證不僅是將分配給結構對象的記憶體都初

始化為0,包括成員之間的Padding也是0

此外,個人覺得用Calloc的好處在於他能保證你分配出來的記憶體確實可用。因為malloc實際上只是預留出一

部分記憶體位址,在真正使用之前並不真正分配記憶體。 這可能導致你可以成功的分配很大的記憶體,結果發現

最後使用的時候OOM Out of Memory了。 有篇很好的文章詳細的分析了這一問題:

http://www.linuxdevcenter.com/pub/a/linux/2006/11/30/linux-out-of-memory.html

================================================

fopen時的訪問模式 r 和 w

很少在應用程式層編程,一直以為r就是讀,w就是寫,不能混用。 原來這不是最根本的區別,r+ 和 w+ 就是讀

寫都可以的。最更本的區別在於,如果一個檔案不存在,r會失敗,w會建立。如果一個檔案已經存在 r模式

開啟,w模式會開啟並truncate(清空)

================================================

#include 標頭檔的嵌套層數限制

書上說是16層,也就是說一個標頭檔包含另一個標頭檔,不斷的包含最多可以有16層的深度。
覺得少了一點,試了一下,用遞迴嵌套 1.h 包含2.h 2.h包含1.h

x86 上 gcc4.1.2 出錯提示 #include nested too deeply 的時候,嵌套了198層,這個。。。真的足夠用

了。

================================================

printf輸出格式中,可以用變數來指定欄位寬度,在位寬描述符的地方使用*,對應變數位置即可:

        char str[]="hello , guys";
        int width = 20;

        printf("%*s/n",width,str);

================================================

GCC:

想要得到GCC預先處理一個檔案的結果(插入標頭檔,展開宏),可以使用 -E 參數:

GCC -E -o file.i file.c

-C 參數可以保留源檔案中的注釋

用GCC輸出組合語言代碼時,可以使用 -fverbose-asm 將C語言中的變數名作為組合語言的注釋。

逐行對比查看GCC如何把C語言翻譯成彙編代碼,這個應該挺有用:

gcc -g -o file.o -Wa,-a=file.asm,-L file.c

================================================

Makefile 中 =  :=  ?= 的區別:

= 遞迴展開,變數會原封不動的儲存字元序列,知道被引用的時候再展開。
:= 簡單展開,在變數賦值的時候就展開,後續修改對它賦值時引用的變數不影響它的值。
?= 如果變數原先沒有賦值,則遞迴展開,否則不變。 這個應該比較常出現在判斷變數是否已經在環境變數中被定義的情況。

如下Makefile

STR = "INIT"
STR2 = "INIT"
STR3 = "INIT"

NAME = "First"
STR = $(NAME)
STR2 := $(NAME)
STR3 ?= $(NAME)
STR4 ?= $(NAME)

NAME = "Second"

ALL:
        @echo $(STR)
        @echo $(STR2)
        @echo $(STR3)
        @echo $(STR4)

Make的輸出結果是:

Second
First
INIT
Second

================================================ 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.