C中的全局变量定义

时间:2014-01-14 18:10:28

标签: c global-variables

在我的代码中

#include<stdio.h>
int a;
a=3;

void main(){
printf("%d",a);
}

为什么我收到警告,

a.c:3:1: warning: data definition has no type or storage class [enabled by default]

在另一种情况下,当我有

#include<stdio.h>
#include<stdlib.h>
int* a;
a=(int*)malloc(sizeof(int));

void main(){
*a=3;
printf("%d",a);
}

我得到error: conflicting types for ‘a’,并警告

warning: initialization makes integer from pointer without a cast [enabled by default]

为什么?

3 个答案:

答案 0 :(得分:3)

您只能使用常量初始化全局变量,并且必须在声明期间完成:

 int a = 3; // is valid

如果需要初始化一个返回malloc的全局变量,那么必须在运行时进行。

int *a;

int main() {
  a = malloc(sizeof(*a));
}

另外请不要在C中转换malloc的返回类型。这是常见的错误来源。 Do I cast the result of malloc?

答案 1 :(得分:1)

顶部(在任何函数之外)只允许定义,声明和初始化,但是这一行:

a=3;

是一个赋值语句,编译器认为它是一个新的声明,因为你没有为a指定任何类型,这就是你得到错误(... no data type...)和{{1}的原因}已经声明为a您收到错误(int

答案 2 :(得分:0)

外部变量和全局变量必须在任何函数之外完全定义一次。