预处理程序指令的语言与C语法的关系微弱是什么意思?

Nee*_*hia 7 c c-preprocessor

关于C预处理器维基百科文章说:

预处理程序指令的语言与C的语法只有微弱的关系,因此有时用于处理其他类型的文本文件.

预处理器的语言与C语法有何不同?有什么好处?C预处理器是否已用于其他语言/目的?

它可以用于区分内联函数和宏,因为内联函数具有正常C函数的语法,而宏使用稍微不同的语法吗?

Ant*_*ala 21

维基百科的文章实际上并不是C编程语言的权威来源.的C预处理器语法 在C语法的一部分.然而,它与短语结构语法完全不同,即这两个语句完全不相关,只是它们都理解输入由C语言标记组成,(尽管C预处理器具有预处理数字的概念,这意味着像123_abc是一个合法的预处理令牌,但它不是有效的标识符).

在预处理完成之后并且在使用短语结构语法开始翻译之前(预处理器指令现已被删除,宏扩展等等),

每个预处理令牌都转换为令牌.(C11 5.1.1.2p1第7项)


将C预处理器用于任何其他语言实际上是滥用.原因是预处理器要求文件包含适当的C预处理标记.它不适用于任何其他语言.即使C++,最近的扩展,如原始字符串文字,也不能由C预处理器预处理!

以下是cpp(GNU C预处理器)手册的摘录:

C预处理器仅用于C,C++和Objective-C源代码. 在过去,它被滥用为一般的文本处理器. 它会阻塞不遵守C的词汇规则的输入.例如,撇号将被解释为字符常量的开头,并导致错误.此外,您不能依赖它来保留对C系列语言不重要的输入特性. 如果预处理了Makefile,则将删除所有硬选项卡,并且Makefile将不起作用.

  • 我曾经尝试在Delphi(即Pascal)源代码上使用C预处理器.这不好用,因为Pascal有''字符串'而不是'"字符串"`. (2认同)