我试图表达指向宏中的类型的指针时遇到了问题.
举个简单的例子吧.
#define INDEX_OF_DATA(data,type,index) \ ((type *)data)[index]
这有效:
INDEX_OF_DATA(buffer,float,3);
失败的地方:
INDEX_OF_DATA(buffer,float[2],3);
因为演员表应该是(float(*)[2]).
有没有办法表达“类型的指针”,…没有使用typeof? (这不是标准C).
注意,当然还有其他方法可以使这个特定的例子起作用.例如,转换为char并通过sizeof(type)* index进行偏移.但我对表达C语言指针的方式感兴趣.
解决方法
使用C类型执行非常复杂的操作可能是一项有趣的运动,但它在实际代码中非常混乱.
为了避免过多地破坏复杂的指针表达式,人们经常使用typedef!
如果你输入你期望用你的宏的所有类型,你就不会有任何问题.注意:
#include <stdlib.h> #define INDEX_OF_DATA(data,index) \ ((type *)data)[index] int main(void) { float (*buffer)[2] = malloc(4 * sizeof(float[2])); typedef float t_f2arr[2]; INDEX_OF_DATA(buffer,t_f2arr,3)[0] = 1.1f; return 0; }
这完全符合您的意图!