【发布时间】:2018-03-02 22:43:31
【问题描述】:
我知道(邪恶?)C++ 宏会引发编译器错误,但字符串文字除外(前段时间在 SO 中找到但无法再次找到):
#define IS_STRING_LITERAL(X) "" X ""
是否有一个宏可以做'相反',即在字符串文字上引发编译器错误,但不会在其他输入上引发?
编辑:见评论,这是用于微控制器上的调试宏。字符串文字应该存在于闪存中,如果我调用了错误的宏,我希望在编译器时得到通知。 'Others' 应该是 int、float、char、char [] 和其他 'basic' 类型。
【问题讨论】:
-
你为什么想要一个?
-
@HolyBlackCat 我想在 Arduino 上编写调试宏。调用字符串文字的宏将在 F 宏上使用 print 来不填充 SRAM(只有 2kB SRAM,如果为空,则要调试地狱;相比之下,更多的 Flash 可用)。如果我在字符串文字上调用了不带 F 的错误宏,我希望在编译时得到通知。
-
PS:我可能会想到一个宏在
const char *上调用未定义的模板函数,但这听起来有点复杂。 -
其他宏的有效参数是什么?