[英]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.