我正在制作一个简单的C程序
#include<stdio.h>
static int a;
a = 5;
int main()
{
printf("%d",a);
return 0;
}
编译器错误:“非静态声明'a'遵循静态声明”
这个错误是什么意思?
答案 0 :(得分:11)
此错误日志的含义是什么?
这有点棘手:看起来像是作业
a = 5;
被视为
int a = 5;
由于旧的C规则允许您声明int
变量和int返回函数而未明确指定其类型(在C的现代版本中这绝对不是一个好主意)。
请注意,仅在函数体外的范围内将此视为具有隐式int
的声明。
您可以通过将声明与初始化相结合来修复它,如下所示:
static int a = 5;
答案 1 :(得分:3)
在函数外部,您只能声明变量,不能有实际的代码语句。
a = 5;
被解释为另一个声明,我的意图是编写一些代码。
而是同时声明和初始化
static int a = 5;
答案 2 :(得分:1)
您对a
的第一次声明是static
(a
有内部联系)。
第二个声明不是static
(a
有外部链接)。是的,在这种情况下,a = 5;
是隐式类型int
的声明。
两人都不同意。
顺便说一下。对于功能,这将是o.k.因为第二个声明将“继承”内部联系。
答案 3 :(得分:1)
我们无法全局编写任何赋值语句。例如:
#include <stdio.h>
static int i=10; //Initialization statement
i=25; //Assignment statement
int main(){
printf("%d",i);
return 0;
}
Output: Compilation error
注意:在variable
时为declaration
分配任何值都称为initialization
,同时为变量分配任何值而不是在声明时{{1} }。
答案 4 :(得分:0)
您无法像在a = 5;
之前那样设置值:main(...)
。请参阅以下代码:
static int a = 1; //default = 0;
int main()
{
printf("a = %d\n", a);
a = 2;
printf("a = %d\n", a);
return 0;
}
输出:
a = 1
a = 2
答案 5 :(得分:0)
A = 5被认为是尝试创建另一个名为a的变量。你应该在静态int之后放置= 5。
Static int a = 5;
答案 6 :(得分:0)
只需对代码进行一些修改即可帮助您理解它。
#include<stdio.h>
//static int a; //comment this statement
a = 5;
int main()
{
printf("%d",a);
return 0;
}
现在编译此代码[请启用编译器的警告]
然后你会收到类似这样的警告 数据定义没有类型或存储类[默认启用]
所以现在尝试理解这个警告,这意味着编译器将语句a=5
视为定义,但没有数据类型。但编译器无法使用int的默认数据类型。
所以这个陈述相当于
int a=5;