C: 如何确定外部数组的 sizeof(array)/sizeof(struct)?

标签 c arrays compiler-errors sizeof

定义类型 x 和该类型的数组 X

x.h:

typedef struct _x {int p, q, r;} x;
extern x X[];

单独的文件来保存巨大的喇叭数组X

x.c:

#include "x.h"
x X[] = {/* lotsa stuff */};

现在我想使用X:

主.c:

#include "x.h"

int main()
{
    int i;

    for (i = 0; i < sizeof(X)/sizeof(x); i++) /* error here */
        invert(X[i]);

    return 0;
}

main.c 不会编译;错误是:

error: invalid application of ‘sizeof’ to incomplete type ‘struct x[]’

如何在不硬编码的情况下获取 X 的大小?

最佳答案

x.h中添加:

extern size_t x_count;

x.c中添加:

size_t x_count = sizeof(X)/sizeof(x);

然后在循环中使用变量 x_count

除法必须在包含数组初始值设定项的编译单元中完成,因此它知道整个数组的大小。

关于C: 如何确定外部数组的 sizeof(array)/sizeof(struct)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23230114/

相关文章:

java - 如何使用-cp在Unix上编译Java

c - 在事先不知道将输入多少个值的情况下如何设计输入?

c - 用\0初始化字符串数组

c - 将数组传递给函数 vs 将变量传递给函数

数组中最小和第二小的c程序

compiler-errors - Rust 编译错误 : process didn't exit successfully

C中变量的声明和定义之间的混淆

使用带有 char 字符串和数组的结构的 C 程序

javascript - 重新映射 JavaScript 数组

c++ - "Triangle"与 VS2012?