在static
中研究C
限定词时,我错误地编写了以下代码。
我认为getEven()
函数不会被编译,但是效果很好。
为什么我可以声明一个没有类型的变量?
我尝试了一些测试,发现没有类型的static
变量的类型是4
个字节整数。
//This code works well.
int getEven(int i) {
static int counter = 0;
if (i%2==0) {
counter++;
}
return counter;
}
//I thought this code would make compile error, but it also works well.
int getEven_(int i) {
static counter = 0; //No type!
if (i % 2 == 0) {
counter++;
}
return counter;
}
答案 0 :(得分:5)
假设声明的变量没有明确的类型名称,则其类型为int
。 c99标准中取消了此规则。
如果您的变量类型为char或float,则这段代码将不起作用。
这是您可以使用unsigned
代替unsigned int
,short
代替short int
和static
代替{{1}的相同原因}。最好使用static int
明确限定变量。