2

嗨,我需要一些帮助来理解一些 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

4

3 回答 3

2

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

于 2013-06-04T13:18:33.273 回答
0

对 1 的回答:是的,但请注意,即使#if 0etc. 中的部分也必须包含有效的预处理令牌。这意味着这将失败并出现诊断:

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

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

对 2 的回答:这pragma是对编译器的提示,它的地址arry应按 32 的倍数对齐。

于 2013-06-04T13:22:41.497 回答
0

是的,这#else部分是编译的。


The #pragma directive is a compiler specific directive. As you compiler was not specified, it could mean anything.

In your case #pragma Align_to(32, arry), likely tells the compiler to insure variable 'arry' is place in memory on a 32 byte boundary. This is typically for performance reasons or compatibility concerns. You may also want to look into the keyword __attribute__ use to control similar variable attributes.

于 2013-06-04T15:35:04.000 回答