就个人而言,我非常喜欢仅限标题的库,但有人声称它们会因为过度内联而导致代码膨胀(以及编译时间较长的另一个明显问题).
我在想,这些说法有多少真相(关于臃肿的说法)?
此外,成本是否合理?(显然有一些不可避免的情况,例如它是纯粹或大部分使用模板实现的库,但是我对实际可用的选项更感兴趣.)
我知道就这样的事情而言,没有严格的规则,准则等,但我只是想了解别人对这个问题的看法.
PS是的,这是一个非常模糊和主观的问题,我知道,因此我已将其标记为此类.
只是一个小问题:C++可以在程序中使用C头文件吗?
这可能是一个奇怪的问题,基本上我需要在C++中使用来自其他程序(用C语言编写)的源代码.两个头文件一般有什么区别吗?也许如果我改变一些图书馆...我希望你能帮助我.
我知道这是一个常见问题,但我仍然无法完全理解它.
在从多个不同的源文件和头文件生成的C或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和编译过程的基本知识最近变得生疏.我试图找出以下问题的答案,但我无法连接编译,链接和预处理阶段基础知识.快速搜索谷歌也没什么帮助.所以,我决定来到最终的知识来源:)
我知道:不应该在.h文件中定义变量.可以在那里宣布它们.
原因:因为头文件可能包含在多个位置,因此重新定义变量多次(链接器给出错误).
可能的解决方法:在头文件中使用header-guard并在其中定义变量.
它真的是一个解决方案:不.因为标题保护是用于预处理阶段.那就是告诉编译器这部分已经包含在内并且不再包含它.但是我们的多重定义错误来自链接器部分 - 在编译之后很久.
整件事让我对预处理和链接的工作方式感到困惑.如果已经定义了头部保护符号,我认为预处理将不包括代码.在那种情况下,不应该解决变量问题的多重定义吗?
这些预处理指令会在标题保护下重新定义编码过程,但是链接器仍会获得符号的多个定义,会发生什么?
是否有任何工具可以帮助组织#include属于.c或.h文件顶部的s?
我只是想知道因为我正在重组我的代码,将各种小函数定义/声明从一个长文件移动到不同的较小文件中.现在,每个较小的文件都需要位于#include长文件顶部的s 的子集.
只是烦人且容易出错,手动弄清楚所有#includes.虽然并非所有#include的代码都存在,但代码通常会编译.示例:文件A std::vector广泛使用但不包括vector; 但它目前包括一些不起眼的其他标题,恰好包括vector(可能通过一些递归包含).
当我想size_t在C++中使用时,我应该包含<stddef.h>还是<cstddef>?我听过几个人说这<cstddef>是个坏主意,应该弃用.这是为什么?
我目前想知道为什么在编译/链接小型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
这个问题可能听起来很愚蠢.但我想知道为什么我们使用".hh"作为C++头文件的扩展而不是仅使用".h".
头文件是预处理的,预处理器甚至不关心头文件的扩展.所以,即使我创建了一个扩展名为".qwe"(test.qwe)的头文件.那么,为什么要使用".hh"作为C++头文件的扩展名.
有人说,我们使用".cc"作为C++文件的扩展,以区别于C文件(扩展名为".c"),同样我们使用".hh"作为C++头文件的扩展,以区别于C头文件(扩展名为".h").我认为这不是一个正当理由.
有谁知道以这种方式命名的原因.
header-files ×10
c++ ×7
c ×6
definition ×1
embedded ×1
linker ×1
namespaces ×1
pic ×1
size-t ×1