尝试在宏中表达指向类型的指针时遇到了问题。
举这个简单的例子。
#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])
。有没有一种方法可以在不使用
type
的情况下表达“typeof
的指针”? (不是标准C)。注意,当然还有其他方法可以使此特定示例正常工作。例如,强制转换为char并由
sizeof(type) * index
偏移。但是我对用C表示pointer to type
的方式很感兴趣。 最佳答案
使用C类型执行非常复杂的工作可能是一项有趣的工作,但在实际代码中却极为困惑。
为了避免过多地破坏复杂的指针表达式,人们经常使用typedef
!
如果您对自己的宏使用typedef
期望使用的所有类型,则不会有任何问题。观察:
#include <stdlib.h>
#define INDEX_OF_DATA(data, type, 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;
}
这正是您想要的!
关于c - 在宏C中键入的指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30565405/