我会刺。我没有为Arduino编写代码,但是我已经做了很多C和C ++编程。但是,即使我确实看到了您的错误,也会有所帮助。
将C ++与C代码一起使用时,您需要记住的主要事情是,如果您希望C代码能够链接到C ++代码,则您的C ++代码需要使用用“ extern“ C”“声明的函数。“外部“ C””告诉C ++编译器我正在为C文件创建可链接代码,或者正在使用C文件中的代码。因此,库API标头中的所有函数都应与源文件中定义的函数相关,例如“ extern“ C” void dosomething()“。如果您尝试使用C ++中的类,请记住C代码无法调用它,则需要创建函数(外部“ C”)来访问该对象。现在,如果您的C代码是使用C ++编译器编译的,那么不必担心“ extern“ C”“。
如果要在C ++代码中调用C代码,则需要使用以下结构包装C标头:
#ifdef ___cplusplus
extern "C" {
#endif
///all my C function declarations... yada yada
#ifdef __cplusplus
} //end extern "C"
#endif
如果您使用的是C ++,请不要使用太多的#define,除非您要创建“ DEBUG”或“ VERSION2”之类的编译时标记来创建特殊的代码集。否则,请将“ const int / char / float”用于定义安全类型检查的数字。编译器通常足够聪明,可以对其进行优化,因此它们会进入ROM /代码空间(具体取决于情况)。另外,不要创建MACROS,使用内联函数。另外,如果编程很愚蠢,例如在C ++中使用很多宏和数字定义,也不要总是遵循惯例。同样的情况适用于C99版本的C,它添加了诸如内联函数和C ++中的const之类的内容。业界意识到过度使用预处理器语言会导致多少错误代码和难以维护的代码。
Eclipse通常将obj文件存储在项目下的目录中。如果要执行“调试”构建,则它位于项目文件夹下的“调试”文件夹下。如果您正在执行“发布”构建,请查看“发布”下的内容,等等。通常,一个干净的构建对我来说在Eclipse中起作用,因此我不知道您的设置有什么问题。我想确保您没有创建预编译的头文件。