【发布时间】:2011-11-29 10:54:45
【问题描述】:
我进行了广泛搜索,网上的信息似乎表明使用预处理器的条件编译仅适用于环境变量。
基本上,我希望有一个内联函数或宏根据其输入参数执行不同的操作。我想要实现的示例:
inline void foo(int x) {
#if (x < 32)
register0 |= (1 << x);
#else
register1 |= (1 << (x - 32));
#endif
}
这里的主要目标是生成的内联代码将不包含用于常量输入的条件代码。
基本上,我目前正在为微控制器 (lpc213x) 编程,并希望有一个内联函数或宏来进行引脚配置设置。由于引脚配置被拆分到多个寄存器(例如上面的 0 和 1),我想执行一些条件检查来决定应该为给定的引脚常量写入哪个寄存器。
但是,引脚配置在编译时都是不变的,所以我想从编译代码中消除条件检查。我知道优化可能会摆脱不必要的条件,但我想知道是否有办法明确地实现这种行为,因为我将来可能需要禁用优化。
谢谢,
FRob
【问题讨论】:
-
如果您使用 C++,您可以使用模板解决此问题。不要标记您的问题 C 和 C++,除非您确实遇到与这两种语言有关的问题。
-
在你的编译器中启用优化,它会神奇地为你做这件事。或者在 C++ 中使用
constexpr。 -
应该是
x < 32,而不是x <= 32(1应该是1U)。 -
抱歉,我将其标记为 C++,因为我认为它也与 C++ 预处理器有关。根据您的建议未标记 C++。
标签: c c-preprocessor