我使用的代码库历史上曾经有意地试图避免依赖于stdio.h爬行.它有自己的打印格式和机制,那些应该用来代替printf等.
但是有人经常会添加一个依赖项,必须引起注意并被删除.所以我试着为最简单的情况发出警报:
#if !defined(NDEBUG)
void printf(float dont_link_with_stdio_h);
#endif
Run Code Online (Sandbox Code Playgroud)
gcc人员似乎一直在思考如何阻止容易出错,因为如果你这样做有一个有用的信息......无论你是否包括在内<stdio.h>.
内置函数'printf'的冲突类型
有一种方法可以关闭此警告(-fno-builtin).并且有各种各样的方法可以做一些事情,例如过滤掉你不想去的东西的符号转储......
但有没有一个简单的非警告(如果你没有包括stdio.h)的方式提醒某人他们已经引入了不需要的printf用法?
您可以重新定义printf为一些令人讨厌的值,这将导致编译或链接错误.例如:
#define printf do_not_include_stdio_h
#include <stdio.h>
int main(void) {
printf("Hello, world!\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
产生输出:
undefined reference to `do_not_include_stdio_h'
如果您希望它是一个更加模糊的名称,或者如果您担心某些可怜的灵魂已定义,则可以包含无效符号do_not_include_stdio_h.
您可以在编译器标志中设置宏定义,这样就不必手动编辑文件.例如:
gcc -Dprintf=do_not_include_stdio_h my_file.c
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
268 次 |
| 最近记录: |