由于#define导致的Aix编译错误

时间:2016-02-08 14:04:44

标签: c aix xlc

" 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)};
像这样。

1 个答案:

答案 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;

或者如果您需要初始化其中许多内容而不是写一个函数。