我无法弄清楚以下代码有什么问题。
我正在用C ++构建一个AVR项目。我需要定义一些将在项目的不同部分使用的参数。更具体地说,我想定义CPU频率,以便在项目的其他部分进行一些计算。
// ======= main.cpp ======
#define F_CPU 16000000UL
#include "MyDriver.h"
int main(void)
{
[...]
}
// ======= MyDriver.h =======
#ifndef MY_DRIVER_H_
#define MY_DRIVER_H_
#ifndef F_CPU
#error "Please define F_CPU in order to implement the driver"
#endif
#include <avr/io.h>
#include <avr/interrupt.h>
#endif
[...]
编译器根据我的#error
指令返回错误:在MyDriver.h
中,未定义F_CPU
。
考虑并推测问题可能属于F_CPU
内main.cpp
的定义这一事实,我想创建一个顶级config.h
标题以包含所有全局定义:
// ======= main.cpp ======
#include "config.h"
#include "MyDriver.h"
int main(void)
{
[...]
}
// ======= config.h ========
#ifndef CONFIG_H_
#define CONFIG_H_
#define F_CPU 16000000UL
#endif
// ======= MyDriver.h =======
#ifndef MY_DRIVER_H_
#define MY_DRIVER_H_
#ifndef F_CPU
#error "Please define F_CPU in order to implement the driver"
#endif
#include <avr/io.h>
#include <avr/interrupt.h>
[...]
#endif
没有任何变化:MyDriver.h
无法看到F_CPU
定义。我还使用了一些编译指示来验证编译器是否会遇到config.h
并且他们确认了这一点。
有什么建议吗?
提前感谢
我的内疚没有适当地寻找解决方案。类似的问题在讨论中 Macro defined in main.c not visible in another included file
所以使用config.h
的方式是正确的,但我必须在每个标题中包含config.h
,而不是从主文件中包含// ======= main.cpp ======
#include "MyDriver.h"
int main(void)
{
[...]
}
// ======= config.h ========
#ifndef CONFIG_H_
#define CONFIG_H_
#define F_CPU 16000000UL
#endif
// ======= MyDriver.h =======
#ifndef MY_DRIVER_H_
#define MY_DRIVER_H_
#include "config.h"
#ifndef F_CPU
#error "Please define F_CPU in order to implement the driver"
#endif
#include <avr/io.h>
#include <avr/interrupt.h>
[...]
#endif
。
IService
答案 0 :(得分:0)
您的示例代码编译没有问题。这里必须包含一些未包含在您的代码中的内容。我的猜测是你要么没有完全按照你的想法进行编译(我们已经在那里)或者在这里没有包含的标题中有一些宏观魔法。