我有一个关于const变量弱属性的问题。我有以下几个文件,用gcc编译:常量变量的GCC弱属性
的main.c:
#include <stdio.h>
const int my_var __attribute__((weak)) = 100;
int
main(int argc, char *argv[])
{
printf("my_var = %d\n", my_var);
}
other.c:
const int my_var = 200;
当我编译这两个文件并运行应用程序我得到的结果如下:由于我在main.c中使用弱属性上my_var
变量
my_var = 100
我寿ught应该由my_var
变量other.c
被覆盖,但事实并非如此......
现在,如果我在main.c
下降的my_var
的const
关键字:
#include <stdio.h>
/* Dropping const... */
int my_var __attribute__((weak)) = 100;
int
main(int argc, char *argv[])
{
printf("my_var = %d\n", my_var);
}
然后重新编译,我得到想要的结果:
my_var = 200
这是我所期望的。
注意:为什么使用const
关键字改变weak
属性的行为:如果我的文件other.c
中删除const
我仍然得到的200
我的问题是,结果呢?它与变量驻留在哪一部分有关?
我使用的Makefile文件是:
.PHONY: all clean
TARGET=test
OBJS=main.o other.o
all: $(TARGET)
$(TARGET): $(OBJS)
gcc $(OBJS) -o $(TARGET)
main.o:main.c
gcc -c main.c
other.o:other.c
gcc -c other.c
clean:
rm -rf *.o $(TARGET)
由于提前,
AFAIK弱属性用于功能。 – LPs
@LPs:它适用于两者。只有描述在函数属性中,var-attributes只是指tothat。 – Olaf
您可能需要使用-fno-common编译才能正常工作。 – fuz