为什么静态标志而不是静态int标志不会给出任何错误?

时间:2011-10-21 11:24:05

标签: c

匆匆看一下我写的

#include <stdio.h>

static flag;            
int main()
{
printf("flag is %d",flag);
return 0;
} 

它不会发出任何警告或错误,并且工作正常。我不明白为什么会这样做?

5 个答案:

答案 0 :(得分:7)

缺少类型时,

C假定为int。函数定义及其参数也是如此:

// same as int add(int x, int y)
add(x,y) { return x + y; }

// same as int main()
main()
{
}

答案 1 :(得分:3)

Staic始终默认为int,static int为0 ..

答案 2 :(得分:1)

int与其他关键字一起使用时,int是可选的

static int  <--> static
volatile int  <--> volatile
short int <--> short
long int <--> long

虽然shortlong是可接受的简短表单,但您应该避免将其与存储关键字(staticvolatile)一起使用。

答案 3 :(得分:1)

主要数据类型

char , int , float , double

存储类,如

auto,static,extern etc

数据类型修饰符,如

long,signed,unsigned etc,

如果存储类或数据类型修饰符错过了变量的主数据类型,那么编译器默认将它们视为整数,即使函数返回类型也是如此 未定义它们默认情况下被视为int

示例

long i is similar to long int i
static i is similar to static int i

但你不能简单地说我并问为什么编译器不会把它当作int

答案 4 :(得分:-1)

标志初始化为0,作为全局静态变量。如果您尝试使用未初始化的变量,Java等其他语言将出错。我假设这是C,在这种情况下,标志默认为int类型。请不要这样做。这是非常糟糕的编程习惯。