C未定义的参考

Ana*_*lyn 5 c resource-files header-files

我在下面的代码中遇到了一些问题,特别是在header.c中我无法访问header.h中的extern int x变量...为什么?.h中的extern变量不是全局变量吗?我如何在其他文件上使用它?

=== header.h ===

#ifndef HDR_H
#define HDR_H

extern int x;
void function();

#endif
Run Code Online (Sandbox Code Playgroud)

=== header.c ===

#include <stdio.h>
#include "header.h"

void function()
{
    printf("%d", x); //****undefined reference to x, why?****
}
Run Code Online (Sandbox Code Playgroud)

=== sample.c文件===

int main()
{
    int x = 1;
    function();
    printf("\n%d", x);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Som*_*ude 7

声明

extern int x;
Run Code Online (Sandbox Code Playgroud)

告诉编译器在某些源文件中会有一个名为的全局变量x.但是,在main函数中声明一个局部变量x.将该声明main移到外面以使其成为全局.


hmj*_*mjd 1

extern声明一个变量,但不定义它。x它基本上告诉编译器在其他地方有一个定义。要修复,请将以下内容添加到header.c(或其他一些.c文件,但只有一个.c文件):

int x;
Run Code Online (Sandbox Code Playgroud)

注意,在main()局部变量中x会隐藏全局变量x