在下面的代码中
#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]
为什么?
您只能使用常量初始化全局变量,并且必须在声明期间完成:
int a = 3; // is valid
如果您需要初始化全局变量并返回malloc
那么必须在运行时进行。
int *a;
int main() {
a = malloc(sizeof(*a));
}
另外,请不要在 C 中强制转换 malloc
的返回类型。这是常见的错误来源。我是否施放了马洛克的结果?
顶部部分(在任何函数之外)只允许定义、声明和初始化,但这一行:
a=3;
是一个赋值语句,编译器将其视为一个新声明,因为您没有为a
指定任何类型,这就是您收到错误 ( ... no data type...
) 的原因,并且a
已经声明为 int
您收到错误 ( ...conflicting types...
)
外部变量和全局变量必须在任何函数外部精确定义一次。