2013-06-04 184 views
2

您好我需要一些幫助,在瞭解了一些C代碼:需要幫助理解的C代碼

#if 0 
    some C code 1 
#elif 0 
    static int8 arry[10]; 
#pragma Align_to(32, arry) 
    ASSERT(((int8ptr_t)arry) & 15) == 0) 
#else 
    ASSERT(((int8ptr_t)arry) & 15) == 0) 
#endif 

我的問題:

  1. 只是#else部分編譯?

  2. #pragma Align_to(32, arry)#elif 0的情況下是什麼意思?

+2

我相信這是'#pragma'。 http://gcc.gnu.org/onlinedocs/cpp/Pragmas.html –

+1

它是'pragma'而不是'pramga'。 – nouney

+0

無論是編譯指示還是pramga都不相關......「#elif 0」表示它被忽略。只有'#else'被編譯爲OP所猜測的。 –

回答

0

多對準編譯器是的,#else的部分是什麼編制。


#pragma指令是編譯器指定的指令。由於你的編譯器沒有指定,所以可能是的意思。

在你的情況#pragma Align_to(32, arry),可能告訴編譯器確保變量'arry'在32字節邊界上的內存中。這通常是出於性能原因或兼容性問題。您可能還想查看關鍵字__attribute__用於控制類似的變量屬性。

2

其實更好的辦法來回答就是問編譯器 - 使用g++ -E或MSVC:cl /EP打印什麼是真正編譯

+0

通過實驗進行編程?我不相信要求編譯器會給出任何明確的答案 - 不像閱讀C語言規範/標準將會。 – Jens

+0

@Jens我的答案與問題的第一部分有關 - 而不是解決難題*「編譯預處理器怪物的哪一部分」*我寧願生成擴展文件 – Dewfy

+0

+1夠公平,但我們需要了解實驗一般陷阱。 – Jens

0

答1:是的,但要注意的是,即使在#if 0等部件必須由有效的預處理令牌。這意味着,這將失敗,診斷:因爲有被孤立'推出一個未終止字符常量

#if 0 
That's what C is all about 
#endif 

。未終止的字符串文字也一樣。

答到2:pragma是一個提示到的arry的地址應爲32