标签: header-files

什么时候只有标题库可以接受?

就个人而言,我非常喜欢仅限标题的库,但有人声称它们会因为过度内联而导致代码膨胀(以及编译时间较长的另一个明显问题).

我在想,这些说法有多少真相(关于臃肿的说法)?

此外,成本是否合理?(显然有一些不可避免的情况,例如它是纯粹或大部分使用模板实现的库,但是我对实际可用的选项更感兴趣.)

我知道就这样的事情而言,没有严格的规则,准则等,但我只是想了解别人对这个问题的看法.

PS是的,这是一个非常模糊和主观的问题,我知道,因此我已将其标记为此类.

c++ header-files

26
推荐指数
2
解决办法
5847
查看次数

如何在C++中使用C代码

只是一个小问题:C++可以在程序中使用C头文件吗?

这可能是一个奇怪的问题,基本上我需要在C++中使用来自其他程序(用C语言编写)的源代码.两个头文件一般有什么区别吗?也许如果我改变一些图书馆...我希望你能帮助我.

c c++ header-files

26
推荐指数
3
解决办法
3万
查看次数

头文件只包含在整个程序中一次?

我知道这是一个常见问题,但我仍然无法完全理解它.

在从多个不同的源文件和头文件生成的C或C++程序中,当使用标题保护时,每个头文件是否只包含在整个代码中一次?

之前有人告诉我,头文件(带有包含警卫)只能在一个翻译单元中包含一次,但在整个代码中会多次包含.这是真的?

如果它在整个代码中只被包含一次,当一个文件希望包含它并且预处理器检测到它已经被包含时,那个希望使用它的文件如何知道它之前包含的代码中的位置?

c c++ header-files c-preprocessor

26
推荐指数
4
解决办法
9007
查看次数

@登录C变量声明

我发现PIC微控制器的这个头文件名为pic1250.h,我无法理解其中使用的一些语法.

该文件的来源是:

/*
 *  Header file for the Microchip 
 *  PIC 12c508 chip 
 *  PIC 12c509 chip
 *  Baseline Microcontrollers
 */

static volatile unsigned char   RTCC    @ 0x01;
static volatile unsigned char   TMR0    @ 0x01;
static volatile unsigned char   PCL @ 0x02;
static volatile unsigned char   STATUS  @ 0x03;
static          unsigned char   FSR @ 0x04;
static volatile unsigned char   OSCCAL  @ 0x05;
static volatile unsigned char   GPIO    @ 0x06;

static          unsigned char control   OPTION  @ 0x00;
static volatile unsigned char …
Run Code Online (Sandbox Code Playgroud)

c embedded header-files pic

25
推荐指数
4
解决办法
2616
查看次数

C/C++中自给自足的头文件

我最近发布了一个问题,询问什么行为将构成C++的禅宗.我收到了很好的答案,但我无法理解一个建议:

  • 使头文件自给自足

你如何确保你的头文件是自给自足的?

任何其他与C/C++中头文件的设计和实现相关的建议或最佳实践都将受到欢迎.

编辑:我发现这个问题涉及我的"最佳实践"部分.

c++ header-files

24
推荐指数
4
解决办法
1万
查看次数

头文件中的变量定义

我对C和编译过程的基本知识最近变得生疏.我试图找出以下问题的答案,但我无法连接编译,链接和预处理阶段基础知识.快速搜索谷歌也没什么帮助.所以,我决定来到最终的知识来源:)

我知道:不应该在.h文件中定义变量.可以在那里宣布它们.

原因:因为头文件可能包含在多个位置,因此重新定义变量多次(链接器给出错误).

可能的解决方法:在头文件中使用header-guard并在其中定义变量.

它真的是一个解决方案:不.因为标题保护是用于预处理阶段.那就是告诉编译器这部分已经包含在内并且不再包含它.但是我们的多重定义错误来自链接器部分 - 在编译之后很久.

整件事让我对预处理和链接的工作方式感到困惑.如果已经定义了头部保护符号,我认为预处理将不包括代码.在那种情况下,不应该解决变量问题的多重定义吗?

这些预处理指令会在标题保护下重新定义编码过程,但是链接器仍会获得符号的多个定义,会发生什么?

c linker include-guards header-files c-preprocessor

24
推荐指数
4
解决办法
3万
查看次数

是否有帮助组织#includes的工具?

是否有任何工具可以帮助组织#include属于.c或.h文件顶部的s?

我只是想知道因为我正在重组我的代码,将各种小函数定义/声明从一个长文件移动到不同的较小文件中.现在,每个较小的文件都需要位于#include长文件顶部的s 的子集.

只是烦人且容易出错,手动弄清楚所有#includes.虽然并非所有#include的代码都存在,但代码通常会编译.示例:文件A std::vector广泛使用但不包括vector; 但它目前包括一些不起眼的其他标题,恰好包括vector(可能通过一些递归包含).

c c++ code-organization header-files

24
推荐指数
1
解决办法
1610
查看次数

我应该为size_t包含stddef.h或cstddef

当我想size_t在C++中使用时,我应该包含<stddef.h>还是<cstddef>?我听过几个人说这<cstddef>是个坏主意,应该弃用.这是为什么?

c++ namespaces naming-conventions size-t header-files

24
推荐指数
3
解决办法
1万
查看次数

没有初始化的C字符串没有警告

我目前想知道为什么在编译/链接小型C程序时我没有从GCC收到错误.

我在version.h以下字符串中声明:

const char* const VERSION;
Run Code Online (Sandbox Code Playgroud)

在version.c我已设置变量的初始化:

const char* const VERSION = "0.8 rev 213";
Run Code Online (Sandbox Code Playgroud)

没问题.我可以在程序的其余部分使用该字符串.

如果缺少c文件,则在编译/链接期间不会发生错误,但是当程序尝试访问变量时,程序会失败并且SIGSEGV(当然).

我设置变量的方法是VERSION正确的还是有更好的方法?或者在编译/链接期间是否有机会出错?

c global-variables definition header-files forward-declaration

24
推荐指数
3
解决办法
1959
查看次数

C++:使用".hh"作为C++头文件扩展名的原因

这个问题可能听起来很愚蠢.但我想知道为什么我们使用".hh"作为C++头文件的扩展而不是仅使用".h".

头文件是预处理的,预处理器甚至不关心头文件的扩展.所以,即使我创建了一个扩展名为".qwe"(test.qwe)的头文件.那么,为什么要使用".hh"作为C++头文件的扩展名.

有人说,我们使用".cc"作为C++文件的扩展,以区别于C文件(扩展名为".c"),同样我们使用".hh"作为C++头文件的扩展,以区别于C头文件(扩展名为".h").我认为这不是一个正当理由.

有谁知道以这种方式命名的原因.

c++ header-files

23
推荐指数
2
解决办法
3万
查看次数