貌似发现一个编译器bug?
-
我用sw5cc编译两个包含【相同名字而且已经被初始化的全局变量】的文件来生成目标文件,然后如果用sw5cc链接,他会说我冲突,但是用mpicc链接就没有问题...
代码:
f1.c:
int var = 2;void func1() {
var = 1;
}f2.c:
int var = 2;void func2() {
var = 2;
}main.c
# include <stdio.h>void func1();
void func2();extern int var;
int main() {
func1();
func2();
printf("%d\n", var);
return 0;
}编译:
sw5cc -host main.c f1.c f2.c
然后会出现链接失败
但是
sw5cc -host -c f1.c
sw5cc -host -c f2.c
mpicc f1.o f2.o main.o
可以链接成功....我发现这个的原因是因为提供代码里Argument.h里面有强符号定义....
-
@LyricZ 撇开这个是不是编译器bug的问题(PS:这个我们会查),但是这个问题会影响您做优化吗?
-
@popo
我想知道的是这种情况话,mpicc是不是会把所有同名的视为一个?
如果是的话,对我做优化没有影响
如果不是的话,其实提供的代码本身就有问题...
-
@LyricZ 不明白为什么你要取和Argument.h里的变量名一样的变量?
-
@popo
是Argument.h里面的变量被重复定义了呀...
然后几乎每个文件都要包含这个头文件呀
如果链接的时候这些重复定义的变量都是独立的
那就不一定能保证程序的正确性?我比较关心的是既然没有报错 那么编译器的链接的行为是什么?
谢谢!
(我没有必要取一样的)
-
如果你对条件指示符#ifndef这个不了解,麻烦您百度一下,谢谢!
-
@LyricZ 如果你优化过的程序有问题,请勿怀疑我们的程序有问题。这个比赛都到尾声了,不可能还出现这么低级的错误。
-
@lyricz 在 貌似发现一个编译器bug? 中说:
sw5cc -host -c f1.c
sw5cc -host -c f2.c
mpicc f1.o f2.o main.o上面等同:
sw5cc -host -c main.c
sw5cc -host -c f1.c
sw5cc -host -c f2.c
sw5cc -hybrid f1.o f2.o main.o