Tag: 头文件

为什么头文件可以包含自己?

任何人都可以想到头文件包含自身的任何场景吗? 我在其中一个程序中看到它并且这个包含在条件编译块下,至少我找不到任何真实的条件。但是,我在想这样的场景是否有任何技术要求?

如何包含头文件?

我在工作区中有一个带有* .c和* .h文件的普通C代码。 我有一个头文件1.h声明一些结构为 struct my1 { int a; .. .. }my_t; 但是当我尝试在另一个头文件2.h中声明类型struct my1的变量时,如下所示: – struct my1 variable1; 它在此声明点出错。 在2.h文件中看起来my1未定义。 在文件1.h中我需要包含2.h,因此在文件2.h中我不能包含1.h,因为害怕递归包含。 我的问题是: – 在这种情况下,我需要声明什么才能解决编译错误? 这一切让我想到了有关头文件包含的更多问题。 如何包含头文件,按什么顺序,哪个头文件首先是哪一个? 递归包含头文件会导致错误一个文件包括其他包括其他包括第一个? 由于某些安全原因,无法发布实际的代码片段,如果这个问题在某种程度上会带来一些可读性问题,那就很抱歉。

未找到链接到头文件的头文件。

我对Nvidia的OpenCl / Cuda框架有疑问,但我认为这是一个gcc链接问题。 opencl_hello_world.c示例文件使用以下头文件: #include “../OpenCL/common/inc/CL/opencl.h” 使用这些头文件的opencl.h : #include #include #include #include 所以所有头文件都在同一个文件夹中。 当我用gcc opencl_hello_world.c -std=c99 -lOpenCL编译时,我收到以下错误消息: error: ../OpenCL/common/inc/CL/cl.h: No such file or directory error: ../OpenCL/common/inc/CL/cl_gl.h: No such file or directory … 即使cl.h和其他头文件位于此文件夹中。 搜索过SO之后,我将opencl.h的包含更改为 #include “cl.h” #include “cl_gl.h” 我在这里阅读: gcc无法找到包含的标题 。 但是搞乱框架头文件似乎不怎么样? 处理这个问题的正确方法是什么?

在C / C ++中包含未使用的头文件是否会受到性能影响?

我有一个项目,每个C / C ++文件使用一堆头文件。 但是每个C / C ++文件使用的头文件大约有70-80%是相同的。 因此,为了使我的代码更具可读性,我计划将项目中需要的所有头文件包含在单个头文件中,例如common_headers.h并将其包含在我的所有C / C ++文件中,如下所示: #include “common_headers.h” 现在,这将包括所有必需的标题,但也包含一些单独文件不会使用的额外标题。 我想知道如果这样做,它会在运行时以任何机会达到性能吗? 我可以用几毫秒的额外延迟来编译代码,但我想知道这是否会影响我的运行时性能? 使用的标题说明: 其中大多数是标准的C / C ++标头。 用户定义的标题中包含内联模板函数。 用户定义的标头中没有静态函数。 这是我的编译器: g ++(GCC)4.4.7 20120313(Red Hat 4.4.7-3)

头文件中定义的小函数:内联还是静态?

我有一些在.h文件中定义的小函数。 这是一个小项目(现在),我想避免将声明和定义分开的痛苦,因为它们一直在变化。 为了避免乘法定义的符号,我可以将它们static或inline 。 什么应该是首选,为什么? 我知道在头文件中定义函数通常是不好的做法。 您不必在答案中提及,这个问题在技术上意味着。

标头包含多个C文件

我有两个文件foo.c和bar.c,我用gcc -c单独编译然后链接。 这两个文件都需要stdio.h和stdlib.h头文件。 我是否必须将它们包括在内? 不觉得有点多余吗? 我应该使用#ifdef吗? 什么是最佳做法?

在C ++中使用关键字class作为变量名

我在编写使用为C文件设计的头文件的C ++代码时遇到问题。 特别是,头文件使用了一个名为class的变量名: int BPY_class_validate(const char *class_type, PyObject *class, PyObject *base_class, BPY_class_attr_check* class_attrs, PyObject **py_class_attrs); 这适用于C,因为类不作为关键字,但在C ++中,类是。 那么无论如何我可以#include这个头文件到一个c ++文件,或者我运气不好? 谢谢。

什么意思是扩展名为“h.in”的文件?

我正在学习C语言,我看到了一个我以前从未见过的新扩展。 带有扩展名的文件如library.h.in是什么意思? 它是带有扩展名“.h”的简单标题吗? 有什么不同?

有什么区别 – 1)预处理器,链接器,2)头文件,库? 我的理解是否正确?

好的,直到今天早上我才对这些术语感到困惑。 我想我有所不同,希望如此。 首先,令人困惑的是,由于预处理器已将头文件包含在包含函数的代码中,因此链接器链接到汇编器/编译器生成的目标文件的库函数是什么? 部分混淆主要是由于我对头文件和库之间的差异的无知而产生的。 经过一段谷歌搜索和堆栈溢出(就是术语?:p),我收集到头文件主要包含函数声明,而实际的实现是在另一个称为库的二进制文件中(我仍然不是100%确定这个)。 所以,假设在以下程序中: – #include int main() { printf(“whatever”); return 0; } 预处理器在代码中包含头文件的内容。 编译器/编译器+汇编器完成其工作,然后最终链接器将此目标文件与另一个实际存储了printf()工作方式的目标文件组合在一起。 我的理解是否正确? 我可能会离开……你能帮我吗? 编辑:我一直想知道C ++ STL。 它总是让我困惑的是它究竟是什么,所有这些标题的集合或什么? 在阅读完回复之后,我可以说STL是一个目标文件/类似于目标文件的东西吗? 而且,我想在哪里可以读取函数的函数定义,如pow() , sqrt()等等。我会打开头文件,但没有找到任何东西。 那么,库中的函数定义是否是二进制不可读的forms?

将C / C ++ DLL头转换为Delphi的最佳资源?

一个相当全面的网站解释了使用用c / c ++编写的dll以及将.h头文件转换为delphi / pascal所涉及的困难和解决方案被发布到我最近的邮件列表中,所以我想我会分享它,并邀请其他人发布其他有用的资源,无论是链接,转换工具还是书籍/纸质标题。 每个答案都有一个资源,所以我们最终将最热门/最好的资源冒充到顶部。