簡體   English   中英

如何在 c 文件之間共享全局數組

[英]How to share global array between c files

我正在嘗試在兩個文件之間共享一個全局數組,如下所示:

main.c

#include <stdio.h>
#include "another.h"
int n=10;
int a[n];

void main(){
  printf("Enter value:\n");
  scanf("%d",&a[0]);
  display();
}

另一個.h

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

void display(){
  printf("%d",a[0]);
  return;
}

但是,我收到以下錯誤: varially modified 'a' at file scope

我無法理解為什么會出現此錯誤。 請問有什么解釋嗎?

以下似乎是創建可變長度數組的嘗試。 但不管它實際上是什么,以下兩行中的第二行是不合法的:

extern int n;
extern int a[n];

n在用於a時尚未定義。

如果你想創建一個 VLA ......
根據定義, VLA僅在堆棧上使用自動存儲持續時間創建。 這使得它們無法用作extern或任何類型的全局范圍變量。

但是,您可以在 header 文件中將size變量聲明extern變量,以便它對於包含該文件的任何源文件都是項目全局的,並且一旦定義,它就可以用於調整項目 scope 中任何數組的大小:

<一些.h>

extern size_t array_size;
extern int gArray[100];

<一些.c>

#include "some.h"
...
size_t array_size = 20;
int gArray[100] = {0};//Not a VLA
...
int main(void)
{
   int array[array_size] = {0};
   for(int i=0;i<sizeof(gArray);i++
   {
       //populate each element of gArray here
   }
   ...

<someother.c>

#include "some.h"
int otherFunc(void)
{
   //gArray is visible here just as it is in main(), with exactly the same values.
   int local array[array_size] = {gArray[0],gArray[1],gArray[2],...,gArray[19]};

   ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM