簡體   English   中英

未初始化時,結構中的值是什么?

[英]What are the values in a struct when uninitialized?

假設我有一個結構:

typedef struct{
   int a;
   float b;
} stuff;

如果我有類似的代碼:

stuff myStuff;
printf( "%d", myStuff.a ) ;

我會得到什么? 是否總是將字段初始化為0?

在C11中,任何未顯式初始化的結構成員(如您的情況)都具有不確定的值。 C11 6.7.9 / 10:

如果未自動初始化具有自動存儲期限的對象,則其值不確定。

讀取這樣一個不確定的值會產生不確定的行為。 C11 6.3.2.1/2:

如果左值指定了可以使用register存儲類聲明的自動存儲持續時間的對象(從未使用其地址),並且該對象未初始化(未使用初始化器聲明,並且在使用前未對其進行任何賦值) ),則行為未定義。

最后,附件J.2(未定義的行為)對此進行了澄清:

在以下情況下,行為是不確定的:

  • 具有自動存儲期限的對象的值在不確定時使用(6.2.4、6.7.9、6.8)。

否。該字段可以有任何值。 這樣做是錯誤的,因為該值是不可預測的。

這取決於結構的對象是具有靜態存儲持續時間還是它是本地對象。 如果結構的對象具有靜態存儲持續時間,則將其所有數據成員初始化為零。 否則,該對象將不會初始化。

例如

#include <stdio.h>

typedef struct
{
    int a;
    float b;
} stuff;

stuff s1; // initialized by zeroes

int main( void )
{
    stuff s2;     //indetermined values

    printf( "%d\n", s1.a ) ;  // 0 will be outputed
    printf( "%d\n", s2.a ) ;  // any value can be outputed
}

暫無
暫無

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

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