gpt4 book ai didi

c++ - 在预处理器表达式中取消引用字符串

转载 作者:太空狗 更新时间:2023-10-29 23:14:10 25 4
gpt4 key购买 nike

我对标准文档草案的阅读表明,在预处理器表达式中取消引用带有一元 * 或常量下标的字符串文字应该是合法的。例如,我应该能够说(使用扩展为带引号的字符串的预定义 __ DATE __ 宏):

#if *__DATE__ == 'A'

#if __DATE__[0] == 'A'

如果我在 GCC 中使用 -std=gnu++0x 这样做,前者会提示

error: operator '*' has no left operand

后者提示

error: token ""Feb 16 2016"" is not valid in preprocessor expressions

标准似乎没有在编译器和预处理器之间定义常量表达式。编译器愉快地编译像这样的东西:

int foo[*__DATE__];

int foo[__DATE__[0]];

在全局范围内,证明这些是合法的常量表达式。

我叫犯规。在我看来,标准要求预处理器在#if 或#elif 子句中处理这些类型的表达式。在我将其报告为 GCC 错误之前,是否有人有任何反驳意见?

最佳答案

您的技术适用于代码,如 if (*_ _ DATE _ _ == 'A') 语句,但不适用于 #IF 宏。预处理器不会进行那种表达式计算。

关于c++ - 在预处理器表达式中取消引用字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35450377/

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