【发布时间】:2019-06-19 07:15:09
【问题描述】:
以下是我想要实现的剪辑版本。我正在对一个单词进行一些算术运算,我想在可用时使用__builtin_clrsb,并且用户使用int 作为单词类型,否则使用慢速算法编译。以下使用 __builtin_clrsb 编译,无论 WORD 类型如何。
代码使用 C++11,但在嵌入式系统上运行,因此我无法访问大部分 std:: 设施。
#if !defined(WORD)
#define WORD int
#endif
template<size_t S, typename word = WORD>
class my_class {
...
...
...
size_t do_stuff(){
#if WORD == int && defined(__builtin_clrsb)
//compile with __builtin_clrsb
#else
//comple with slow method
#endif
}
};
【问题讨论】:
-
你只能使用文字来
#define宏int是关键字。您的编译器是否返回错误? -
@dunajski 如果您在谈论
#define WORD int,那是有效的:宏名称是WORD,并且宏定义可以指定任何有效标记序列,而不仅仅是文字。 (#if WORD == int... 不是。) -
@dunajski 没有错误,但
WORD == int总是正确的。 -
@HamzaYerlikaya aschelper,哎呀我不知道这个宏是有效的,我的错。
标签: c++11 gcc clang c-preprocessor