为什么要在C程序中重新定义变量?

时间:2019-10-28 10:50:10

标签: c linker elf redefinition

我尝试重新定义变量并将其初始化为零。毫不意外,该编译以error:redefinition of a结尾。

#include <stdio.h>
static int a = 0;
static int a = 0;
int main()
{
    return 0;
}

令我惊讶的是,删除初始化后,程序已成功编译。

#include <stdio.h>
static int a ;
static int a ;
int main()
{
    return 0;
}

此外,我尝试仅初始化两个变量之一,并且编译成功。

#include <stdio.h>
static int a ;
static int a = 0;
int main()
{
    return 0;
}

我知道ELF对象文件中“强符号”和“弱符号”的区别。但是根据CSAPP,这些概念与全局变量相关,而不是静态变量。因此,我认为它无法在这里回答我的问题。

编译器是Windows 10中的MinGW-W64项目构建的gcc 8.1.0。

谢谢。

0 个答案:

没有答案