您好我需要一些帮助来理解一些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
我的问题:
是否仅编译了#else
部分?
#pragma Align_to(32, arry)
案例中#elif 0
的含义是什么?
答案 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__
用于控制类似的变量属性。