有没有办法在结构中使用宏填充,我的意思是:
struct Monument{
char name[32];
PADDING( 4 * sizeof(int));
int cityId;
PADDING( 4 * sizeof(int));
int age;
}
PADDING(s)宏只会增加空间。
答案 0 :(得分:1)
你可以这样定义:
#define TOKENPASTE(x, y) x ## y
#define TOKENPASTE2(x, y) TOKENPASTE(x, y)
#define PADDING(size) char TOKENPASTE2(padding_, __LINE__) [size]
根据需要更改字段名称前缀(最好不要使用前缀 与其他可能的成员发生冲突)。
请记住(正如Remy Lebeau和FrançoisAndrieux在评论中所提到的那样)编译器有时会添加意外的填充。供参考,您可以阅读:
编辑:抱歉,初始代码不正确(在宏中错误地使用了__LINE__
扩展)。我使用以下解决方案修复了它:https://stackoverflow.com/a/1597129/1561140