加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

防止包含stdio.h(或其他标准头文件)

发布时间:2020-12-16 05:31:38 所属栏目:百科 来源:网络整理
导读:我所使用的代码库历来是有目的地 – 旨在避免stdio.h爬行的依赖.它有自己的打印格式和机制,而那些应该是使用而不是printf等等. 但有些人经常增加依赖,必须注意并取出.所以我试图为最简单的情况发出警报: #if !defined(NDEBUG) void printf(float dont_link_
我所使用的代码库历来是有目的地 – 旨在避免stdio.h爬行的依赖.它有自己的打印格式和机制,而那些应该是使用而不是printf等等.

但有些人经常增加依赖,必须注意并取出.所以我试图为最简单的情况发出警报:

#if !defined(NDEBUG)
   void printf(float dont_link_with_stdio_h);
#endif

gcc人似乎一直在思考阻止容易错误的原因,因为如果你这样做有一个有用的消息,无论你是否包括< stdio.h>或不.

conflicting types for built-in function ‘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;
}

produces the output:

undefined reference to `do_not_include_stdio_h'

如果您希望它是一个更加晦涩的名字,或者如果您担心有些可怜的灵魂会定义do_not_include_stdio_h,则可以包含无效的符号.

您可以在编译器标志中设置宏定义,因此您不必手动编辑文件.例如:

gcc -Dprintf=do_not_include_stdio_h my_file.c

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读