比方說,我有三個文件:爲什麼我不能在C中得到'多重定義'的枚舉?
//m.h
const int RED = 1;
//m.h ends here
//f1.c
#include "m.h"
//f1.c ends here
//f2.c
#include "m.h"
int main() {return 0;}
//f2.c ends here
編譯每一個單獨的工作,但gcc -Wall f1.o f2.o -o prog
會產生: multiple definition of 'RED'
現在如果我更換常量:
//m.h
enum {RED=1} colors;
//m.h ends here
我將能夠編譯prog
並使用RED
作爲常量,並且不會得到任何multiple definition
錯誤。
爲什麼enum
的行爲與在不同文件中具有相同名稱的全局變量或結構時可見的行爲不同?
究竟是什麼命令行給你的錯誤? (你應該在'.h'文件中'en''定義'f1.c'和'f2.c'包含'#include';對象定義應該在'.c'文件中。) –
這就是我的意思,但忘了補充。我將編輯該問題。 – Paz
您的命令'gcc -Wall f1.o f2.o -o prog'使用現有的* .o'文件,您必須使用早期的'gcc -c ...'命令生成該文件。如果您要更改源文件,很可能您的'.o'文件與您的'.c'文件不符。如果您編譯並鏈接到單個命令中,您是否可以重現該問題? 'gcc -Wall f1.c f2.c -o prog' –