我有以下代码,我想以编程方式访问struct的字段:
#include <stdio.h>
#include <stddef.h>
#define FIELD(NAME, NUM) {NAME##NUM}
struct SFOO
{
int i;
float f1;
float f2;
char c;
};
int main() {
printf("Offset of 'f1' is %u", offsetof(SFOO, f1));
printf("Offset of 'f1' is %u", offsetof(SFOO, FIELD(f, 1)));
}
main()
中的第一行有效但第二行无法编译(MSVC 2012)。如何使用标记串联生成字段名称?
答案 0 :(得分:3)
删除{
定义中的}
和FIELD
。
#define FIELD(NAME, NUM) NAME##NUM
根据您之前的定义,您的print语句会扩展为offsetof
宏不接受的内容:
printf("Offset of 'f1' is %u", offsetof(SFOO, {f1}));