在C的符號常數在編譯時或運行時定義?
請告訴我符號常數之間的差:VS常量變量
int const GOKU = 9111;
在C的符號常數在編譯時或運行時定義?
請告訴我符號常數之間的差:VS常量變量
int const GOKU = 9111;
最明顯的區別
#define GOKU 9111
是,#定義由預處理器處理,而常數是由編譯器處理。它們都不是在運行時定義的。當使用#define時,文本GOKU將在您的源代碼中用9111替換,之後編譯器將完成其工作。
預處理器常量僅在編譯之前就已存在。事實上,它們都是在預處理過程中解決的,並且(如果您想),您只能執行預處理並查看結果。
常變量,而另一方面,留在編譯的程序,因此可以在連接階段找到了。例如,您可以在另一個文件中定義「extern int const GOKU」,然後將它與第一個文件鏈接在一起訪問GOKU。
請注意,如果你嘗試過包括常量變量文件,它可能導致錯誤,如「符號GOKU定義multiplie倍」。
在可見性方面也存在差異。雖然常量變量遵循嵌套命名空間的規則(即例如:如果它是全局的,它將在文件中隨處可見,但它可以在任何代碼塊中重新定義),預處理常量可以從它所在的行可見被定義爲未定義的行(或文件結尾)。當然,您可以取消定義(使用#undef)或重新定義(使用另一個#定義)它。
還有的代碼是如何編制的問題。使用第一個GOKU會導致代碼更快一些,指令中會生成正弦數字符號。使用第二個GOKU會導致代碼慢一點,因爲將間接指向變量放置在數據段中的位置。
這就是我可以立即召回。
速度是一樣的。自己檢查裝配。 (另外,這是一個C問題,所以沒有'::'運算符。) – 2011-05-16 06:46:25
我明白了。會做。 – Srv19 2011-05-16 06:53:23
'#define'最後不應該有分號。 – 2011-05-16 06:34:47
嗯,沒有看到之前,投票關閉和合並的問題,thx – Saad 2011-05-16 06:51:56