将函数保留在头文件中还是源文件中更好

2023-12-05

是将函数保留在头文件中并将它们包含到主源文件中更好,还是将函数保留在源文件中并将它们链接到主源文件中更好?

一些库将函数保存在单独的源文件中,这些源文件在特殊的头文件中声明。当您将该头文件包含在主源文件中时,您就链接了所有这些函数。但是,它为每个源文件创建一个目标文件(不是吗?)。我在想,将所有函数都包含在特殊头文件中的头文件中保留函数不是更有效吗?

包括功能

#include <foo.h>
#include <boo.h>

int main() {

}

连接功能

int foo();
int boo();

int main() {

}

头文件不应包含任何代码或数据定义。

在头文件中:

  1. 函数原型
  2. 类型声明(typedef、结构、联合等)
  3. extern对象声明
  4. 宏定义

并作为一个例外

  1. static inline函数定义。

所有其他代码或对象定义应位于.c源文件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将函数保留在头文件中还是源文件中更好 的相关文章

  • 在两个 .cpp 文件之间定义全局变量 [重复]

    这个问题在这里已经有答案了 如何在 A cpp 和 B cpp 之间共享 全球化 bool 变量 其中它们都不包含其他 h 文件 他们有其他联合头文件 但彼此没有 我可以在这些共享标头中定义全局变量吗 Thanks 我可以在这些共享标头中定
  • C#9 顶级语句文件上的属性

    我正在尝试向顶级语句文件添加属性 但没有找到任何相关信息 是否可以 对于某些上下文 我想仅在该文件中禁用规则 SuppressMessage StyleCop CSharp LayoutRules SA1516 ElementsMustBe
  • 如何将 C++ 类包装在基于 C 的 dll 或基于 CLI 的 dll 中?

    我被告知将我用 C 编写的类导入到 dll 中 然后在 c 应用程序中使用该 dll 下列的本指南 https stackoverflow com questions 4555961 how to use a class in dll我创建
  • 如何检查 .NET 4.0 中的泛型参数是否是动态的

    我有课ObjectMapper
  • 隐形打开的弹出窗口

    第二天就解决这个问题 要重现 请创建新的 WPF 应用程序 xaml
  • 将占位符文本添加到文本框

    我正在寻找一种将占位符文本添加到文本框的方法 就像在 html5 中使用文本框一样 IE 如果文本框没有文本 则会添加文本Enter some text here 当用户单击它时 占位符文本消失并允许用户输入自己的文本 如果文本框失去焦点并
  • 我们应该使用 Eval 还是 Databind 事件?

    当使用 Asp Net 并使用 ListView 等控件创建网站时 使用 Eval 命令是一个好习惯吗 还是应该在 databind 事件中填充文字和数据 取决于您是否想在更新事件上写回数据 在这种情况下数据绑定 如果您只想读取该数据 可以
  • 使用 Microsoft Graph 创建用户

    如何使用 Microsoft graph 创建用户 因为我在保存过程中遇到了权限失败的问题 我确实有几个问题 在图中调用创建用户 API 将在哪里创建用户 是在 Azure AD 还是其他地方 我尝试通过传递 json 和必需的标头来调用创
  • IClaimsTransformation 未触发

    我尝试过实施一个IClaimsTransformation我在 ASP NET CORE 3 1 Web 应用程序中找到的类 public class ClaimsTransformer IClaimsTransformation publ
  • 基于 C++ 范围的 for 循环

    尝试使用基于范围的 for 循环执行某些操作 可以使用常规的 for 循环来完成 如下所示 vector
  • 使用对象列表构建树

    我有一个带有属性 id 和parent id 的对象列表 我想建造一棵树来连接那些孩子和父母 1 个父对象可以有多个子对象 并且有一个对象将成为所有对象的祖先 实现该功能最快的算法是什么 我使用 C 作为编程语言 但其他语言也可以 像这样的
  • 为什么在 .net 中使用 Invoke on Controls? [复制]

    这个问题在这里已经有答案了 可能的重复 为什么 NET不允许跨线程操作 https stackoverflow com questions 2896504 why net does not allow cross thread operat
  • 如何使用 C# 代码使用超链接的 onClick 事件?

    我正在尝试为页面中的超链接添加条件 而不是仅仅使用特定的链接 例如 a href help Tutorial html Tutorial a 我想为不同的用户显示不同的页面 例如 如果用户以管理员身份登录 他们将看到与普通用户不同的链接 我
  • 使用 cudamalloc()。为什么是双指针?

    我目前正在浏览有关的教程示例http code google com p stanford cs193g sp2010 http code google com p stanford cs193g sp2010 学习CUDA 演示的代码 g
  • 从存储过程返回 int 值并在 ASP.NET 代码中检查它以验证登录表单

    当我多次尝试但没有得到有效结果时 使此代码运行的真实顺序是什么 SQL存储过程的代码 set ANSI NULLS ON set QUOTED IDENTIFIER ON GO ALTER PROC dbo login proc usern
  • IEnumerable.比带中断的 for 循环更快吗?

    我们的代码打开表单时遇到了一些缓慢的情况 这可能是由于for循环与break这需要很长时间才能执行 我把它切换到IEnumerable Any 并看到表格很快打开 我现在试图弄清楚是否单独进行此更改会提高性能 或者是否正在访问Product
  • 语义问题 Qt Creator:命名空间“std”中没有名为“cout”的成员

    我开始使用 Qt Creator 编写代码 对于 C 文件 我遇到很多语义问题 99 是 命名空间 yyy 中没有名为 xxx 的成员cpp文件构建 编译和输出没有问题 如果我点击例如cout 我已链接到 iostream 我是否需要在 Q
  • 检索 Autofac 容器以解析服务

    在 C WindowForms 应用程序中 我启动一个 OWIN WebApp 它创建另一个类 Erp 的单例实例 public partial class Engine Form const string url http 8080 49
  • Intel 和 AMD 处理器有相同的汇编程序吗?

    C语言被用来编写Unix以实现可移植性 使用不同编译器编译的同一个C语言程序会产生不同的机器指令 为什么 Windows 操作系统能够在两者上运行Intel https en wikipedia org wiki Intel and AMD
  • Visual Studio 2015默认附加库

    当我在 VS 2015 中创建一个空项目时 它会自动将这些库放入 附加依赖项 中 kernel32 lib user32 lib gdi32 lib winspool lib comdlg32 lib advapi32 lib shell3

随机推荐

  • 通过 firebase 身份验证检查来反应路由器保护的路由

    我想实现受保护的路由 并使用 firebase 进行身份验证 我的浏览器因这段代码而冻结 const App React FC gt const authentication setAuthState useState authentica
  • 类库中带有 POCO 的 EF 4 作为 MVC 2 模型

    我正在探索 Entity Framework 4 并使用 POCO 作为 MVC2 Web 应用程序的模型 我需要将模型和数据访问代码放在单独的库中 因为这样我就可以与另一个 Web 应用程序共享它 该应用程序充当客户访问数据的门户 我的问
  • 在javascript中创建带有下拉框的提示输入对话框?

    有谁知道如何在javascript中创建带有下拉框的提示输入对话框 Example 我认为这是不可能的 您可能必须使用某种模式框 查看 jQuery UI 的模式框 http jqueryui com demos dialog
  • Java if 与 try/catch 开销

    Java 中使用 a 是否有任何开销试着抓块 而不是if block 假设所附代码不要求如此 例如 采用以下两个字符串 安全修剪 方法的简单实现 public String tryTrim String raw try return raw
  • 使用“IN”SQL 函数中的值将逗号分隔值从 .NET 传递到存储过程

    我有一个类似于以下的 SQL 查询 create procedure test param1 nvarchar max as begin select from table where column1 in param1 end 现在我需要
  • 如何使用相同的对象属性创建多个关系?

    我正在使用 protege 5 来开发本体 我创造了has composition作为对象属性 在我的本体中 相同的 object property 用于不同的域及其各自的范围 例如has compositionA 是 B 并且has co
  • 是否可以使用Python的默认互联网浏览器打开某些网址?

    我希望 python 使用计算机默认的网络浏览器打开某个地址 这可能吗 绝对可以 使用网页浏览器 module
  • 当调用 Activity 被销毁时,Android 新 Activity 上的 getIntent 为 NULL

    你们有解决以下问题的方法吗 在注册活动的 onDestroy 中 当用户按下后退按钮时 我调用一个新活动 以便用户可以输入当天的一些最终生产数据 然后通过电子邮件发送报告 问题是 在刚刚启动的活动中 对 getIntent 的调用返回 nu
  • 删除表中过滤的行而不是整个行

    过滤表格时 如何仅删除表格行而不删除整个工作表行 Dim TradeTable As Excel ListObject Set TradeTable Sheets Pre Trade ListObjects PreTradeTable On
  • 如何在 git 中强制执行作者/提交者身份验证?

    目前我们的项目中使用git进行版本控制 开发环境是内网 带有AD的Windows服务器 无法访问Internet 有没有办法配置 git 以使用作者和提交者的开发者域登录名 我们希望阻止开发人员自己提供这些信息 我在谷歌搜索这个问题时发现了
  • iPhone中非系统字体的名称

    我想向我的 iPhone iPad 应用程序添加非系统字体 我已将字体文件添加到项目中 并将字体添加到UIAppFontsinfo plist 的属性 加载我正在使用的字体fontWithName of UIFont 但是name字体的名称
  • 使用 nvd3 库显示单系列多条形图

    Does anyone know how I would go making a multi bar graph to be single series In a working example that i ve seen of how
  • C:为什么我们要包含声明但不定义的头文件?

    在较高的层面上 我知道我们使用 include使其他文件中的代码可用于当前文件的语句 但我不明白为什么我们要包含一个头文件 其中包含声明但没有定义 也许我需要更多地了解编译 链接过程才能完全理解其机制 但是是否有一个我一开始就未能掌握的高级
  • ASP.Net Web API OData - 消费者可以自由地查询他们想要的任何内容?

    我刚刚阅读了有关 OData 查询的 ASP Net Web API 支持的内容 并且在协调查询过滤的外部暴露方面遇到了麻烦 这本质上为集成商提供了向数据库抛出任意查询过滤器的能力 而不考虑最佳查询计划 不应查询的字段等等 如何清理 ODa
  • 截断小数不四舍五入[重复]

    这个问题在这里已经有答案了 可能的重复 c 如何将小数值四舍五入到小数点后两位 用于页面上的输出 我想像下面这样截断小数 i e 2 22939393 gt 2 229 2 22977777 gt 2 229 您可以使用数学轮 decima
  • 角度 $interval 在超过“count”参数后是否会自行取消?

    关于 Angular 中的 interval 服务的快速问题 查看文档 间隔 它们警告您手动取消间隔 但您可以选择在初始化时提供计数参数 一旦计时器 滴答作响 超过了分配的计数 它会自行取消还是只是停止调用该函数并在后台继续运行 TL 博士
  • 带有深思熟虑的冠层的 scipy

    我正在评估 Enthought 包 我安装了32位canopy 从下载https www enthought com downloads 在Ubuntu中 sudo bash canopy 1 0 1 rh5 32 sh 经过测试我没有看到
  • Symfony 在预持久上将数据添加到对象

    我有一个用于创建文档的表格 一方面 我可以添加名称和描述 在旁边我可以选择一个或多个机构创建的文档属于谁 每个机构被分配一个specific市场 一共有7个市场 所以一个市场可以有多个代理机构 但一个代理机构只能属于一个市场 我想要实现的是
  • 如何使用c++运行批处理文件?

    如何使用c 运行批处理文件 我对此一无所知 请参阅 system 函数 http www cplusplus com reference clibrary cstdlib system
  • 将函数保留在头文件中还是源文件中更好

    是将函数保留在头文件中并将它们包含到主源文件中更好 还是将函数保留在源文件中并将它们链接到主源文件中更好 一些库将函数保存在单独的源文件中 这些源文件在特殊的头文件中声明 当您将该头文件包含在主源文件中时 您就链接了所有这些函数 但是 它为