2017-07-06 108 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) –