【发布时间】:2023-04-11 06:05:01
【问题描述】:
我想将#include 重新定义为不同的词。我不知道 C++ 预处理是否可以做到这一点,但我正在尝试:
#define import #include
#define io <iostream>
import io
这显然不起作用,所以我只是想知道我是否可以在“import #include”语句中转义“#”以完全改变它,但这也需要对我的预处理器进行另一次运行相信。对此的任何意见将不胜感激。
对于任何想知道错误的人来说,错误输出是“Stray "#" found in statement...”。
编辑: 我查看了 cmets,现在我更了解了 c 预处理器的工作原理。我之前并没有真正理解它,但我想我找到了解决方法。这样做的原因是创建一种简单的方法来将导入语句从一种语言转换为包含 C++ 中的语句。该语言是我自己创造的,是的,它完成了其他语言无法做到的事情。
【问题讨论】:
-
如果你想写phyton,为什么不写python呢?严重的是,这非常令人困惑,没有明显的收获。顺便说一句,我认为这是不可能的
-
预处理器不会在扩展输出中查找指令,即使输出看起来像指令。因此,你不能做你想做的事。在 C11 中(不一定与 C++11 相同,但 C 和 C++ 处理器的功能本质上是相同的),标准说 §6.10.3.4 Rescanning and further replacement ¶4:不处理生成的完全宏替换的预处理令牌序列作为预处理指令,即使它类似于一个,但是…….
-
另请参阅How do I run the preprocessor on local headers only,了解“无法通过宏扩展创建预处理器指令”的规则被积极利用的场景。
-
@JonathanLeffler:值得注意的是
_Pragma不是预处理器指令,因此它可以由宏生成。据我所知,这是宏可以生成预处理器指令效果(即#pragma的效果)的唯一情况。 -
@Cheersandhth.-Alf:你说得对——这就是
but …子句继续说的内容:但是其中的所有 pragma 一元运算符表达式随后按照 6.10 中的规定进行处理。 9 下面。评论中没有足够的空间来写所有这些。
标签: c++ c-preprocessor