簡體   English   中英

C中struct成員的默認值是什么?

[英]What are the default values of struct members in C?

假設所有都是本地自動變量

假設我有以下程序:

int x;
printf("%d",x);

編譯器給我警告: x is used uninitialized in this function 但為什么我不能為結構成員獲得相同的結果:

struct Person
    {
        int age;
        char name[10];
    } man;

printf("Name : %s Age : %d\n", man.name, man.age);

本地堆棧成員是否已初始化為某些默認值? 我希望它們是垃圾值。 如果是這樣,為什么編譯器在使用未初始化時不會拋出結構成員的警告?

編譯器不需要為此提供診斷。 好的編譯器呢。 常規變量和結構之間沒有任何區別,如果它們在本地范圍(自動存儲持續時間),它們將包含垃圾值。 使用這些值可以調用未定義的行為。

使結構不同的唯一因素是,如果初始化至少一個成員,其余成員將被設置為零(初始化,就好像它們具有靜態存儲持續時間)。 但是,當沒有成員被初始化時,情況並非如此。

不,它們未初始化為任何默認值。 您可以說編譯器以及標准缺乏檢測此類問題的能力,並且不會發出任何警告。 可能對於編譯器編寫者來說,很容易檢查普通(基本)數據類型而不是UDT。

代碼分析工具可能會針對此類情況發出警告。 以CppCheck為例。

暫無
暫無

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

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