頭文件里面能不能定義變量?
最近在編譯一個工程的時候,突然遇到了變量重復定義的問題,根據提示打開這幾個 C 文件,并沒有發現定義變量的地方。后來再找一找,原來變量定義在了頭文件里面。
結論就是,頭文件里面可以定義變量,但是最好不要定義。
寫個 demo 看一下。頭文件里面定義變量 num,1.c包含頭文件,并且輸出 num 的值。2.c也包含頭文件,同樣也輸出 num 的值。代碼結構很簡單。
再寫個 Makefile,方便看到編譯的步驟。
執行 make 的時候,從 1.c 變成 1.o 沒有問題,2.c 變成 2.o 也沒有問題,但是最后一步鏈接的時候,提示 num 重復定義。
為什么會這樣。我們知道編譯的第一步是預處理,所有的頭文件都會被展開,比如 1.c ,預處理后變成了這樣,num 的定義直接被搬到了 C 文件里面。同理,2.c 被預處理后,里面也多了個 num 的定義。所以最后一步鏈接的時候,編譯器就提示 num 重復定義。
解決這個問題方法有很多,比如定義 num 的時候,加上 static,限制它的作用域,或者干脆不要在頭文件里面定義變量,把它放到源文件中,如果其他文件需要訪問,用 extern 聲明一下。
頭文件里面定義變量也跟編譯器有關,同樣的代碼,換個編譯器,鏈接的時候竟然沒有問題。最后,還是建議大家,最好不要在頭文件里面定義變量和函數。
審核編輯:劉清
-
變量
+關注
關注
0文章
614瀏覽量
28947 -
頭文件
+關注
關注
0文章
26瀏覽量
10116
原文標題:頭文件能不能定義變量?
文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
PIC單片機能不能把IO口定義成一個變量
共享變量能不能實現這種功能呢
請問哪個系列的DSP的 C∕C++ 頭文件和外設示例有PID控制的例程呢?
諧波治理到底能不能節電
MCU_頭文件編寫

評論