为什么下面的代码不起作用?请解释一下。
#include<stdio.h>
#include<stdlib.h>
int main(int number, char arg[])
{
extern int i;
i = 5;
printf("%d",i);
return 0;
}
#include<stdio.h>
#include<stdlib.h>
int main(int number, char arg[])
{
extern int i;
i = (int) malloc(sizeof(int));
i = 5;
printf("%d",i);
return 0;
}
答案 0 :(得分:1)
extern
用于指定变量存在,但尚未定义。您不创建变量,只向编译器指定它存在。如果没有,则链接时会出错。
我建议您详细了解extern keyword
一个简单的使用示例是两个.c
文件,一个将您的外部变量视为全局,另一个打印此变量
file.c
int value = 5;
的main.c
int main() {
extern int value;
printf("%i\n", value);
return 0;
}
使用gcc file.c main.c
进行编译会输出5
答案 1 :(得分:0)
外部变量的值必须从定义它们的函数外部定义。
答案 2 :(得分:0)
写作时
extern int i;
你只是声明(但没有定义)一个名为i的变量。您需要在程序中的某个位置定义i
。例如,它可能只是在main
之后或在另一个.c
文件
int main(int number, char* arg[])
{
extern int i;
i = 5;
printf("%d",i);
return 0;
}
int i; //here you define i
答案 3 :(得分:0)
默认情况下,extern
关键字提供(例如,输出初始化程序),该变量的声明。您需要定义变量。要有内部联系:
#include <stdio.h>
#include <stdlib.h>
static int i;
int main(int number, char arg[])
{
extern int i;
i = 5;
printf("%d",i);
return 0;
}
和外部联系:
#include <stdio.h>
#include <stdlib.h>
int i;
int main(int number, char arg[])
{
extern int i;
i = 5;
printf("%d",i);
return 0;
}
另见here。
C11(n1570),§6.2.2标识符的链接
对于使用存储类说明符extern声明的标识符 可以看到该标识符的先前声明的范围) 如果事先声明指定内部或外部联系,则 后面声明中标识符的链接与 在先前声明中指定的联系。如果没有事先声明 可见,或者如果先前的声明指定没有链接,那么 标识符有外部链接。