外部代码不起作用

时间:2012-10-21 14:48:50

标签: c extern

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

#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 个答案:

答案 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声明的标识符   可以看到该标识符的先前声明的范围)   如果事先声明指定内部或外部联系,则   后面声明中标识符的链接与   在先前声明中指定的联系。如果没有事先声明   可见,或者如果先前的声明指定没有链接,那么   标识符有外部链接。