gpt4 book ai didi

c++ - 在 VC 2015 上使用带有字符串的宏失败

转载 作者:IT老高 更新时间:2023-10-28 22:36:44 26 4
gpt4 key购买 nike

为什么编译失败?

char programDate[] = "("__DATE__")";

但这编译得很好(见空格):

char programDate[] = "(" __DATE__")";

我知道 VC2015 现在支持文字运算符。但这不应该处于编译阶段吗? __DATE__ 应该已经被预处理器处理过了。这是怎么回事?

我想到了 Unicode/非 Unicode 构建的一些混合匹配问题 - 但它没有帮助。这不仅仅是预定义宏的问题,还有用户定义的问题:

#define MACRO "abc"
char data[] = "("MACRO")";

编辑:

Error C3688 invalid literal suffix '__DATE__'; literal operator or literal operator template 'operator ""__DATE__' not found

最佳答案

从 C++11 开始,用户定义的文字存在并且是预处理的一部分。语法是:

preprocessing-token:
user-defined-string-literal
// other stuff...

user-defined-string-literal:
string_literal ud-suffix

ud-suffix:
identifier

所以 "("__DATE__ 匹配 preprocessing-token,但 "(" __DATE__ 不匹配 (这是两个单独的预处理标记)。

宏替换发生在标记化之后。由于在您的第一个示例中没有 token __DATE__,因此没有替换。

关于c++ - 在 VC 2015 上使用带有字符串的宏失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31738796/

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