【发布时间】:2013-12-06 13:04:01
【问题描述】:
我故意写错了代码
printf("%d %d", 1);
使用g++ 和-Werror=format 编译。
编译器给出了这个令人印象深刻的警告:
error: format '%d' expects a matching 'int' argument [-Werror=format]
据我所知,编译器无法判断代码错误,因为直到运行时才会解析格式字符串。
我的问题:编译器是否具有启动 printf 和类似 libc 函数的特殊功能,或者这是我可以用于我自己的函数的功能?字符串字面量?
【问题讨论】:
-
“因为格式字符串直到运行时才被解析”你确定吗?这很有趣,如果这是真的。留在运行时对我来说没有意义。
-
编译器不做神奇的代码分析。它对
printf和类似的libc函数进行特殊情况检查。它不会自动与您自己的函数一起使用。
标签: c++ c compiler-construction libc