-3

“1506-221 (S) Initializer 必须是有效的常量表达式。”

在头文件编译期间的 aix 中,我遇到了这个问题。

在头文件中,源就像

#define A(b) (a+b)

像那样。

在源代码中使用此宏“A”(Ex:A(5))的任何地方都会引发上述错误。

谁能帮我解决这个问题?

编辑:

在头文件中

#define A(b) (a+b)

在源文件中

struct a
{
   int a;
   int b;
} ain = {10, A(10)};

像这样 。

4

1 回答 1

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;

或者如果您需要初始化其中的许多,请改为编写一个函数。

于 2016-02-08T14:16:40.660 回答