Code Composer Studio 中 CCS #10056 中的意外重定义错误
Unexpected Redefinition Error in CCS #10056 in Code Composer Studio
我遇到了问题,如果我在 CCS 中包含 headers.
,我会遇到意外的重新定义错误
最小示例:
// main.c
#include "test.h"
int main(void)
{
init();
return 0;
}
和
// test.h
#ifndef TEST_H_
#define TEST_H_
int var;
void init();
#endif /* TEST_H_ */
和
// test.c
#include "test.h"
void init()
{
var=0;
}
我明白了
error #10056: symbol "_var" redefined: first defined in "./main.obj";
redefined in "./test.obj"
关于编译。我很确定这应该可以在任何使用 IDE 的 C 中工作。
我想念什么?
“我很确定这应该可以在任何使用 IDE 的 C 中工作”。不,它没有。
每次在 C 文件中包含 test.h
时,变量 var
不仅被声明而且被定义,因此编译错误。
包含保护并不是为了避免跨翻译单元的多重定义,而是为了解决在单个翻译单元中多次包含同一头文件的问题。
参见示例https://fr.wikipedia.org/wiki/Include_guard
解决这个问题的正确方法是只在头文件中声明你的变量:
extern int var;
然后定义 变量在 C 文件中只定义一次(没有 extern)。
int var;
我遇到了问题,如果我在 CCS 中包含 headers.
,我会遇到意外的重新定义错误最小示例:
// main.c
#include "test.h"
int main(void)
{
init();
return 0;
}
和
// test.h
#ifndef TEST_H_
#define TEST_H_
int var;
void init();
#endif /* TEST_H_ */
和
// test.c
#include "test.h"
void init()
{
var=0;
}
我明白了
error #10056: symbol "_var" redefined: first defined in "./main.obj"; redefined in "./test.obj"
关于编译。我很确定这应该可以在任何使用 IDE 的 C 中工作。 我想念什么?
“我很确定这应该可以在任何使用 IDE 的 C 中工作”。不,它没有。
每次在 C 文件中包含 test.h
时,变量 var
不仅被声明而且被定义,因此编译错误。
包含保护并不是为了避免跨翻译单元的多重定义,而是为了解决在单个翻译单元中多次包含同一头文件的问题。
参见示例https://fr.wikipedia.org/wiki/Include_guard
解决这个问题的正确方法是只在头文件中声明你的变量:
extern int var;
然后定义 变量在 C 文件中只定义一次(没有 extern)。
int var;