为什么我可以使用“静态”限定符声明一个没有类型的变量? (以C表示)

时间:2019-08-01 03:40:30

标签: c

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;
}

1 个答案:

答案 0 :(得分:5)

假设声明的变量没有明确的类型名称,则其类型为int。 c99标准中取消了此规则。

如果您的变量类型为char或float,则这段代码将不起作用。

这是您可以使用unsigned代替unsigned intshort代替short intstatic代替{{1}的相同原因}。最好使用static int明确限定变量。