我试图表达宏中的类型指针时遇到了问题.
举个简单的例子吧.
#define INDEX_OF_DATA(data, type, index) \
((type *)data)[index]
Run Code Online (Sandbox Code Playgroud)
这有效:
INDEX_OF_DATA(buffer, float, 3);
Run Code Online (Sandbox Code Playgroud)
失败的地方:
INDEX_OF_DATA(buffer, float[2], 3);
Run Code Online (Sandbox Code Playgroud)
因为演员应该是(float(*)[2]).
有没有办法表达"指针type",...没有使用typeof?(这不是标准C).
注意,当然还有其他方法可以使这个特定的例子起作用.sizeof(type) * index例如,转换为char并抵消.但我对pointer to type以C 表达的方式感兴趣
如果我们想保留原来的宏,我们可以使用这个技巧:
#define INDEX_OF_DATA(data, type, index) ((type*)data)[index]
struct mystruct { float f[2]; };
mystruct* p = &INDEX_OF_DATA(buffer, mystruct, 3);
Run Code Online (Sandbox Code Playgroud)
不幸的是,这个解决方案可能会受到结构填充的影响,因此最好检查一下:
static_assert(sizeof(mystruct) == sizeof(float (*)[2]), "padding found");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2627 次 |
| 最近记录: |