未引用变量的分配?

时间:2013-12-02 06:15:24

标签: c

我在野外看到了以下代码,我不知道该怎么做:

或多或少:

int main(void)
{
   int a = 0, v;
   printf("%d\n", v); 
} 

这个带gcc的代码将打印出来0.首先我很好,因为初始化的局部变量被赋值为0,但是在这种情况下我从未声明过v的类型...所以给出了什么?

5 个答案:

答案 0 :(得分:4)

int a = 0, v;

相当于:

int a = 0;
int v;

所以你 声明v的类型,只是没有明确说明。这是一个int

无论如何,like all uninitialized local variablesv的价值不保证是任何东西。访问它仍然是未定义的行为;你碰巧得到了0。

答案 1 :(得分:1)

您认为逗号在声明声明中的作用是什么?

在C-C99和C ++中,初始化程序是声明符的可选部分。 init-declarator-list是一个以逗号分隔的声明符序列,每个声明符都可以包含其他类型信息,或初始值设定项,或两者兼而有之。

因此,您的表达式int a = 0, v;确实将v声明为int

答案 2 :(得分:1)

v的类型为int。请阅读变量声明的语法。

你很幸运它正在打印0. v的值是垃圾。

答案 3 :(得分:1)

来自 ISO / IEC 9899:TC2 部分6.7.8语义

如果automatic storage duration的对象未明确初始化,its value is indeterminate
如果未明确初始化具有静态存储持续时间的对象, 然后:
- 如果它有指针类型,则将其初始化为空指针;
- 如果它具有算术类型,则将其初始化为(正或无符号)零;
- 如果是聚合,则根据这些规则初始化(递归)每个成员;
- 如果它是一个联合,则根据这些初始化(递归)第一个命名成员 规则。

答案 4 :(得分:0)

From Wiki

可以使用一个语句声明多个变量,如下所示:

int anumber, anothernumber, yetanothernumber;