gpt4 book ai didi

c - vfscanf.c 警告 : the scanf functions add several kilobytes of bloat

转载 作者:行者123 更新时间:2023-11-30 20:34:46 26 4
gpt4 key购买 nike

我在使用 Dietlibc 时收到此警告消息。是不是因为dietlibc版本的原因。我正在使用饮食0.33

我无法解决此警告,请帮助我

最佳答案

您的程序需要将 scanf 库函数添加到您的目标代码中。这可能是因为您使用 sscanf 或其他一些此类函数,或者可能您调用的函数又需要 scanf 函数。

scanf(和 printf)库因其庞大而闻名。它们需要解码(和编码)字符串、十六进制和浮点等的所有函数。仅仅因为使用单个 scanf 函数,您最终可能会将 2k 程序扩展到 20k。

该警告告诉您,您的程序可能比其他情况占用更多的空间,因为您需要使用 scanf 库。

编辑:

库是目标文件的集合。链接器添加程序所需的任何目标文件。它不能包含目标文件的一部分;要么全有,要么全无。因为 vscanf 包含在 Dietlib 的 libstdio.o 中,所以您使用的任何 stdio 函数都会引入 vsscanf。

参见https://github.com/hchunhui/dietlibc/blob/master/Makefile :

LIBSTDIOOBJ=$(patsubst libstdio/%.c,$(OBJDIR)/%.o,$(wildcard libstdio/*.c))

DIETLIBC_OBJ = $(OBJDIR)/unified.o \
$(SYSCALLOBJ) $(LIBOBJ) $(LIBSTDIOOBJ) $(LIBUGLYOBJ) \
$(LIBCRUFTOBJ) $(LIBCRYPTOBJ) $(LIBSHELLOBJ) $(LIBREGEXOBJ) \
$(OBJDIR)/__longjmp.o $(OBJDIR)/setjmp.o \

$(OBJDIR)/dietlibc.a: $(DIETLIBC_OBJ) $(OBJDIR)/start.o
$(CROSS)ar cru $@ $(DIETLIBC_OBJ)

请注意,vsscanf 位于 libstdio 目录中。

就我个人而言,我会尝试将 scanf 和 printf 函数放在单独的目标文件中,因为它们太大了。我还看到一些库附带了两个版本的 scanf 和 printf,其中之一不支持浮点只是为了缩小代码大小。然而,按照他们的方式去做可能是有充分理由的。

避免拉入所有 stdio 的唯一方法是不使用其中任何一个 - 使用文件描述符函数(open 而不是 fopen,read 而不是 getc)。

关于c - vfscanf.c 警告 : the scanf functions add several kilobytes of bloat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41543923/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com