c - 如果每个需要的库都包含在我的 main 中,我是否需要在具有函数实现的文件中 #include 任何内容?
问题描述
好的,所以我正在编写一个程序,我们称之为:writing.c
我已经在 : 中编写了两个函数实现,functions.c
并且仅 functions.h
包括(但我使用 printf 和其他依赖于<stdio.h>
etc 的函数,但我不包括在这里)。
然后我有writing.c
哪个有main,并调用函数,通常它是一个完整的程序。这里有#include
我需要的一切
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include "help.h"
#include "functions.h"
functions.c
当我编译它时,编译器似乎无法识别其中的一个函数writing.c
:
warning: implicit declaration of function ‘f1.."
我在这里错过了一些#include 吗?
解决方案
“functions.c”,其中仅包括“functions.h”(但我使用 printf 和其他依赖于 <stdio.h> 等的函数,但我不在这里表示)。
您应该#include
将翻译单元需要的所有文件放入该翻译单元。为什么你故意不包括他们?请注意,每个翻译单元 (.c) 文件首先相互独立编译,然后才链接在一起。链接将找到未解析符号的定义,但声明需要存在于每个翻译单元中。因此,换句话说,您包含的main.c
内容与是否functions.c
编译无关。
Short example to demonstate this:
//a.h
void f();
//a.c
#include
void f()
{
printf("hello");
}
无论其他文件包含什么,这个 ac 文件都不会编译。因为在编译这个特定的 .c 文件时,不会考虑其他文件(直接或间接包含在其中的文件除外)。
推荐阅读
- android - 应用 onStop/OnResume 后 Android 回调不会再次运行
- javascript - 使用 vuex 更新数据
- java - 如何将 ServletContainerInitializer 添加到 Grizzly WebappContext?
- java - JGIT AddCommand 没有向我的 github 存储库添加任何内容
- php - Wordpress 上的左侧边栏不会创建菜单
- php - Github.com 无法呈现换行符
- c# - MS Project C# 以编程方式添加预算
- vba - 子或函数未定义 MS Access SendEmailFromOutlook
- python - AWS Python 开发工具包 - 发送 CLI 命令
- node.js - 在 Node 中保存来自 REST POST 调用的数据