【发布时间】:2012-04-10 15:52:40
【问题描述】:
#include <stdio.h>
typedef struct {
int a;
int b;
int c;
} FIRST_T;
typedef struct {
int x;
int y;
int z;
FIRST_T *p;
} SECOND_T;
typedef struct {
int a1;
int a2;
int a3;
FIRST_T *q;
}THIRD_T;
const FIRST_T p1[]={{1,2,3},{3,4,5},{6,7,8}};
const FIRST_T p2[]={{4,5,12},{7,8,9}};
const SECOND_T my_second[]=
{
{1,2,3,p1},
{4,5,6,p2}
};
const THIRD_T my_third[] = {{1,2,3,my_second[1].p},{4,5,6,my_second[0].p}};
int main() {
//const THIRD_T my_third[] = {{1,2,3,my_second[1].p},{4,5,6,my_second[0].p}};
printf("%d %d %d %d \n",
my_third[0].a1,
my_third[0].a2,
my_third[0].a3,
my_third[0].q[1].c);
}
我知道如果我在函数范围内初始化 my_third 它可以正常工作,因为“在 C 中,具有静态存储持续时间的对象(例如在文件范围内声明的对象)只能使用常量表达式进行初始化”,否则它会给我:
错误:初始化元素不是常量 new.c:41: 错误:(接近于 `my_third[0].q' 的初始化)
现在我的问题是:在不移动函数内部的表达式的情况下,是否有任何解决方法可供我使用。我无法移动,因为这些结构在我的代码中的许多地方都使用了。
如果您需要更多信息,请告诉我。
【问题讨论】:
-
在将代码发布到此站点之前,您确实需要修复缩进并在 typedef 之间添加一些空行。