sizeof函数在extern数组上保持失败

时间:2016-06-03 10:03:53

标签: c linux gcc

我正面临一个问题,如下所述

我有一些C档

return Redirect::to('your_ulr')->withInput(Request::all());

main.c

#include <stdio.h> #include "header.h" int main() { int x = sizeof(a); printf("size = %d\n", x); }

header.h

#include <stdio.h> extern int a[];

header.c

Que 1:这个外部声明是否正确?

Que 2:如果是,我在编译时遇到错误

#include "header.h"

int a[] = {1, 21, 3};

1 个答案:

答案 0 :(得分:2)

main中,由于a中的int声明,编译器知道extern int a[];是一个header.h数组。

但它不知道它的大小,因为在int a[] = {1, 21, 3};中看不到可以推断出大小的声明(main.c),因为它在header.c中完全是与main.c无关;即使main.c不存在,您也可以编译header.c(至少如果您删除了笨拙的sizeof)。

无法直接从a中获取main.c数组的大小 但是你可以在header.c中创建一个函数来告诉你a数组的大小:

<强> header.c

#include "header.h"

int a[] = {1, 21, 3};

int GetSizeofA()
{
   return sizeof a;
}

<强> header.h

extern int a[];
int GetSizeofA();

<强>的main.c

#include <stdio.h>
#include "header.h"

int main() {
    int x = GetSizeofA();
    printf("size = %d\n", x);
}

顺便说一句:#include <stdio.h>中无需header.h