gpt4 book ai didi

c - 标准库包含多个文件多次?

转载 作者:行者123 更新时间:2023-12-05 01:29:23 26 4
gpt4 key购买 nike

在 K&R 书籍 (p59)(编辑:第二版,涵盖 ANSI C)中,建议将较大的项目拆分为多个文件更容易。在每个文件中,几个库像往常一样包含在顶部:例如getop.c 需要 stdio.h,stack.c 和 main.c 也需要。

片段是这样的:

//main.c
#include <stdio.h>
#include <stdlib.h>
#include "calc.h"
int main(void)
{
//etc
}


//getop.c
#include <stdio.h>
#include <ctype.h>
#include "calc.h"
getop()
{
/*code*/
}

//stack.c
#include <stdio.h>
#include "calc.h"
void push(double val)
{
//code
}

我无法弄清楚如何在一个项目中多次包含标准库。当然,对于能够访问内置函数的自定义 .c 文件,我们需要包含 #include <header.h>。以便他们知道 printf() 的存在和 getchar()等等,但如果stdio.h,这种方法不会增加最终程序的大小吗?包含四次而不是一次(如果所有内容都放在一个文件中)?

K&R 确实指出,将一个程序拆分为多个文件最终会使维护所有 .h 文件变得更加困难。

我想我真正想问的是编译器如何找出一个库在一个项目中被#included 多次的问题。

我已经阅读了有关使用include guards 的内容,但似乎此实现不需要这样做,因为它们处理确保相同的代码位不会被包含两次,如:

文件“module.h”

#ifndef MODULE_H
#define MODULE_H

struct foo {
int member;
};

#endif /* MODULE_H */

文件“mod2.h”

#include "module.h"

文件“prog.c”

#include "module.h"
#include "mod2.h"

refs

最佳答案

I suppose what I am really asking is how does the compiler figure out the problem of one library being #included several times in a project.

您不包含 #include <stdio.h> 的库,您只需包含它的声明,这样编译器就知道存在哪些函数。链接器负责包含库并将所有内容放在一起。

关于c - 标准库包含多个文件多次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28527183/

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