我想知道函数如何发出编译时警告?
我之所以想到这一点,是因为当我们在 printf (scanf) 的第一个参数中为与该类型说明符匹配的变量提供错误的格式说明符并使用带有 -Wall 选项的 gcc 进行编译时,编译器会发出警告。
现在,据我所知,printf 和 scanf 是定期实现的可变参数函数,我不知道有什么方法可以在编译时检查字符串的值,更不用说在不匹配时发出警告了。
谁能解释一下我是如何收到编译器警告的?
最佳答案
警告是特定于实现(即编译器和 C standard library )的。您可以让编译器给出很少的警告(查看 tinycc ...),甚至没有...
我正在关注最近的 GCC (例如 4.9 或 10 ...)在 Linux 上。
您会收到此类警告,因为 printf
用适当的 __attribute__
声明(参见 GCC function attributes)
(使用 GCC 您同样可以使用 printf
属性声明您自己的类似 format
的函数...)
顺便说一句,符合标准的编译器可以非常特别地免费实现 <stdio.h>
header 。所以它可以处理 #include <stdio.h>
无需读取任何 header 文件,而是通过更改其内部状态。
您甚至可以添加自己的函数属性,例如通过使用您的 GCC plugin 自定义您的 GCC
关于c - printf 如何发出编译器警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33321751/