簡體   English   中英

錯誤:在文件范圍內修改了'd'

[英]error : variably modified 'd' at file scope

代碼1: -

int size;

struct demo
{
    int a;
};

int main()
{
    scanf("%d",&size);
    struct demo d[size];
    return 0;
}

這段代碼工作正常。

代碼2: -

int size;

struct demo
{
    int a;
};

int main()
{
    scanf("%d",&size);
    return 0;
}

struct demo d[size];

此代碼顯示錯誤: -

error : variably modified 'd' at file scope

為什么這樣的錯誤會出現在Code 2Code 1運行正常?

在代碼2中,您的結構數組駐留在數據段中,根據定義

數據段是程序的虛擬地址空間的一部分,其包含由程序員初始化的全局變量和靜態變量。 該段的大小由程序員在編譯或匯編程序之前放置的值確定,並且在運行時不會更改

因為第二個例子中的d數組是全局的,所以它不能是一個可變長度的數組; 那些直到運行時才得到它們的實際大小,這對於全局來說是不可能的。 編譯器必須能夠在可執行文件中為全局數據分配空間,如果大小未知,則無法進行。

函數內部聲明的變量是堆棧變量,它們在調用函數時分配。 另一方面,全局變量是在任何函數執行之前分配的堆變量。 這就是為什么在第二個代碼中,不可能為數組d分配內存。

暫無
暫無

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

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