0

为什么下面的代码不起作用?请解释。

#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;
}
4

4 回答 4

2

extern用于指定变量存在,但尚未定义。您不创建变量,只需向编译器指定它存在。如果没有,您将在链接时出错。

我建议您阅读有关extern 关键字的更多信息

一个简单的使用示例是两个.c文件,一个将您的 extern 变量作为全局变量,一个打印此变量

文件.c

int value = 5;

主程序

int main() {
  extern int value;

  printf("%i\n", value);
  return 0;
}

编译这个使用gcc file.c main.c将输出5

于 2012-10-21T14:51:10.970 回答
0

外部变量的值必须从定义它们的函数外部定义。

于 2012-10-21T14:50:51.180 回答
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
于 2012-10-21T14:51:12.180 回答
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;
}

另请参见此处

C11 (n1570), § 6.2.2 标识符
的链接 对于使用存储类说明符 extern 在该标识符的先前声明可见的范围内声明的标识符)如果先前声明指定内部或外部链接,则后面声明的标识符与前面声明中指定的链接相同。如果前面的声明不可见,或者前面的声明没有指定链接,则标识符具有外部链接。

于 2012-10-21T14:57:09.587 回答