这里我有一个小程序:
// header.h
#pragma once
int a;
int reta();
// extra.c
#include "header.h"
int reta() {
return a;
}
// main.c
#include "header.h"
#include <stdio.h>
int main(void) {
printf("%d, %d", a, reta());
}
使用Visual Studio编译时的结果(C标准:c17,x64):
0,0
使用GCC编译时的结果(gcc—L.—o test.exe *. c—std = c17—mwindows—Wl,—subsystem,console):
C:/msys64/ucrt64/bin/../ lib/gcc/x86_64—w64—mingw32/13.2.0/../../ x86_64—w64—mingw32/bin/ld. exe:C:...\ Temp\ccGvFOtk. o:main. c:(.+0x0):`a '的多重定义;C:...\ Temp\ccANU1lv.o:extra. c:(.+0x0):首先在此定义 collect2.exe:error:ld returned 1 exit status
问题是: 为什么会有差异?我应该做些什么来修复GCC case 中的错误?