2017-07-06 153 views
-4
#include <stdio.h> 
int main(void) { 
    int a = 1; 
    switch(a) { 
     int i = 2; 
     case 1: printf("%d",i); 
       break; 
     default: printf("Hello\n"); 
    } 
} 

以下代碼示例給出36作爲輸出。這怎麼可能?我知道編譯器會直接將控件轉移到case 1,而不需要評估i。但是,爲什麼我得到的輸出爲36? PS:我正在使用GCC。初始化switch語句中的變量

+3

爲什麼在java下標記? – Curious

+0

這將如何幫助? @GAURANGVYAS – Jarvis

+0

我得到'0',所以我懷疑你觸發了未定義的行爲(至少在C中)。 –

回答

4

在C++中,此代碼格式不正確,因爲您無法跳入變量的範圍。

在C的代碼是未定義的行爲:int i;開關內部塊存在,但是通過跳轉到case 1:你繞過其中值2將被分配到i的部分。所以實際上你試圖打印一個未初始化的變量。

+0

所以,我得到的輸出 - 36是一個垃圾值? –

+1

@KarthikBhat這是[未定義的行爲](https://stackoverflow.com/a/4105123/1505939) –