警告是特定的实现(即编译器和C标准库).你可以让一个编译器提供很少的警告(看看tinycc ......),甚至没有...
我专注于Linux 上最近的GCC(例如4.9或5.2 ......).
你得到这样的警告,因为printf用适当的声明__attribute__(参见GCC 函数属性)
(使用GCC,您也可以printf使用format属性声明自己的函数...)
顺便说一下,符合标准的编译器可以自由地特别实现<stdio.h>头文件.因此它可以在#include <stdio.h>不读取任何头文件的情况下处理,但可以通过更改其内部状
您甚至可以添加自己的功能属性,例如通过MELT自定义GCC
printf 如何发出编译器警告?
有些编译器分析的格式和其他参数类型printf(),并scanf()在编译时。
printf("%ld", 123); // type mis-match `long` vs. `int`
int x;
printf("%ld", &x); // type mis-match 'long *` vs. `int *`
Run Code Online (Sandbox Code Playgroud)
但是,如果计算格式,则不会进行该检查,因为它是运行时问题。
const char *format = foo();
printf(format, 123); // mis-match? unknowable.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1283 次 |
| 最近记录: |