" 1506-221(S)初始值设定项必须是有效的常量表达式。"
在编译头文件期间的aix中我遇到了这个问题。
在头文件中,源代码就像
#define A(b) (a+b)
如果在源中使用此宏" A"(例如:A(5)),则会抛出上述错误。
任何人都可以帮我解决这个问题吗?
编辑:
头文件中的
#define A(b) (a+b)
源文件中的
struct a
{
int a;
int b;
} ain = {10, A(10)};
像这样。
答案 0 :(得分:1)
你不能初始化一个非常量值的结构,在这种情况下你使用的是我想的结构字段之一,但因为你的宏甚至不知道因为a
不是实际上定义为任何东西,试试这个
#define INIT_STRUCT(x, a, b) do {x->a = a; x->b = x->a + b} while (0);
并像这样使用
struct a {int a; int b;};
INIT_STRUCT(&a, 10, 10);
注意:但请不要这样做,而只是像这样初始化
a.a = 10;
a.b = a.a + 10;
或者如果您需要初始化其中许多内容而不是写一个函数。