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;