【发布时间】:2016-04-04 00:17:05
【问题描述】:
我使用的一个代码库在历史上曾尝试过——有目的地——避免对 stdio.h 的依赖。它有自己的打印格式和机制,这些是应该用来代替 printf 等的。
但是有人经常添加一个必须引起注意和删除的依赖项。所以我试着为最简单的情况发出警报:
#if !defined(NDEBUG)
void printf(float dont_link_with_stdio_h);
#endif
gcc 的人们似乎也在考虑停止简单的错误,因为如果你这样做会有一个有用的信息......无论你是否包含 <stdio.h>。
内置函数“printf”的类型冲突
有一种方法可以关闭此警告 (-fno-builtin)。并且有各种各样的方法可以做一些事情,比如过滤符号转储中你不想在那里的东西......
但是有没有一种非常简单且不会引起警告(如果您没有包含 stdio.h)的方法来提醒某人他们引入了不需要的 printf 用法?
【问题讨论】:
-
你能不删除库的编译版本(.lib),这样它就不会编译/链接吗?
-
@LeeTaylor 我宁愿不要篡改编译环境,该环境用于包含此库的其他内容(如果他们愿意,这些内容可以免费包含 stdio.h)。我正在寻找比使用我尝试的方法并添加
-fno-builtin...e.g. 更少干扰的东西。可以单独在源内部完成的事情。 -
重新定义类型/结构而不是函数。
-
你能
#define printf dont_include_stdio_h(或#define printf _Static_assert(0, "Do not include stdio.h"))吗? -
@Cornstalks 我没有想到#define,因为我担心它不会给出明显的信息......但是通过将它变成垃圾作为 `#define printf $dont_include_stdio_h$ 它正确以一种足够好的警报的方式把事情搞砸了。我会把它作为答案......