Q我有extern数组定义在一个文件中,并在另一个文件中使用
file1.c: file2.c: int array[] = {1, 2, 3}; extern int array[];为什么不sizeof在数组中file2.c?
A一个extern大小未指定的数组是一个不完整的类型;你不能对其应用sizeof。sizeof在编译时运行,并且它无法了解在另一个文件中定义的数组的大小。
你有三种选择
file1.c: file2.c: int array[] = {1, 2, 3}; extern int array[]; int arraysz = sizeof(array); extern int arraysz;(另请参阅问题6.23。)
file1.h: #define ARRAYSZ 3 extern int array[ARRAYSZ]; file1.c: file2.c: #include "file1.h" #include "file1.h" int array[ARRAYSZ];
file1.c: file2.c: int array[] = {1, 2, 3, -1}; extern int array[];
另请参阅问题6.21。
参考:H&S 第 7.5.2 节,第 195 页