c - C 编译器如何解析以下 C 语句?

标签 c compiler-construction printf lexical-analysis

考虑以下几行:

int i;
printf("%d",i);

词法分析器会进入字符串将 %d 解析为单独的标记,还是会将“%d”解析为一个标记?

最佳答案

这里有两个解析器:第一个是 C 编译器,它将解析 C 文件并基本上忽略字符串的内容(尽管现代 C 编译器也会解析字符串以帮助捕获错误格式的字符串——不匹配% 转换说明符和传递给要转换的 printf() 的相应参数之间。

下一个解析器是 C 运行时库中内置的字符串格式解析器。当您调用 printf 时,将在运行时调用它来解析格式字符串。相比之下,这个解析器当然非常简单。

我没有检查过,但我猜想帮助检查错误格式字符串的 C 编译器将实现一个类似于 printf 的解析器作为后处理步骤(即使用它自己的词法分析器) .

关于c - C 编译器如何解析以下 C 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25582530/

相关文章:

c - C的未知模式提取

dynamic - 直接执行的编译器设计

compiler-construction - 是否有针对不同 "RnRS"方案标准的摘要?

c - 从多维数组中提取时序并写入c中的文件

c - 如何从 Texas Instruments Code Composer 中的现有项目创建新项目?

c - 如何在C中表示内存中的FLOAT数

c - 如何编译用 C 编写的 64 位 dll?

c# - 为什么 params 关键字不是上下文相关的?

C sprintf覆盖?

c - 我如何在 C 中打印这个?