了解C代码需要帮助

时间:2013-06-04 13:13:17

标签: c c-preprocessor conditional-compilation

您好我需要一些帮助来理解一些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的含义是什么?

3 个答案:

答案 0 :(得分:2)

实际上更好的回答方法是询问编译器 - 使用g++ -E或MSVC:cl /EP来打印真正编译的内容

答案 1 :(得分:0)

回答1:是的,但请注意,即使#if 0等内的部分也必须包含有效的预处理令牌。这意味着这将通过诊断失败:

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

因为单独的'引入了未终止的字符常量。未终止的字符串文字也是如此。

答案2:pragma提示编译器arry的地址应以32的倍数对齐。

答案 2 :(得分:0)

是的,#else部分是编译的内容。


#pragma指令是编译器特定的指令。由于未指定编译器,可能意味着什么。

在您的情况#pragma Align_to(32, arry)中,可能会告诉编译器确保变量' arry'在32字节边界内存放在内存中。这通常是出于性能原因或兼容性问题。您可能还希望查看关键字__attribute__用于控制类似的变量属性。