gpt4 book ai didi

c++ - 为字符串文字 C++ 引发编译器错误的宏

转载 作者:行者123 更新时间:2023-11-30 05:04:07 24 4
gpt4 key购买 nike

我知道(邪恶的?)C++ 宏会引发编译器错误,但字符串文字除外(前段时间在 SO 中找到它但再也找不到了):

#define IS_STRING_LITERAL(X) "" X ""

是否有一个宏可以做“相反”的事情,即在字符串文字上引发编译器错误,但在其他输入上不会?

编辑:查看评论,这是针对微 Controller 上的调试宏。字符串文字应该存在于闪存中,如果我调用了错误的宏,我希望在编译时得到通知。 'Others'应该是int, float, char, char[]等'basic'类型。

最佳答案

取决于那些“其他输入”是什么。如果它们可以是任何东西,那么答案可能是“不可能”。

你可以这样做:

#define foo(x) (std::enable_if_t<!std::is_same_v<const char *, decltype(+(x))>>(), (x))

此行检查 x 是否为 const char *(或衰减为 1),如果为真则引发错误。 (这不是您要求的:不可能将普通 const char [] 传递给它。)

std::cout << foo(123); // Works.
std::cout << foo("123"); // error: no type named 'type' in 'struct std::enable_if<false, void>'

关于c++ - 为字符串文字 C++ 引发编译器错误的宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49078502/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com