Questions tagged «header-files»

头文件在某些​​编程语言中用于将源代码作为单个副本保存,可以在多个源文件中重复使用。该标签应用于有关使用头文件的问题。应该将诸如C,C ++,PHP或Ruby之类的编程语言的标记与此标记一起使用,因为头文件的使用可能会因编程语言而异。此标记通常不与Java或Go编程以及import指令一起使用。


9
为什么有头文件和.cpp文件?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 为什么C ++具有头文件和.cpp文件?
483 c++  header-files 

13
为什么我不应该包含cpp文件而是使用标头?
因此,我完成了我的第一个C ++编程任务,并获得了成绩。但是根据等级,我为失去了分数including cpp files instead of compiling and linking them。我不太清楚这是什么意思。 回顾一下我的代码,我选择不为我的类创建头文件,而是在cpp文件中完成所有操作(如果没有头文件,它似乎可以正常工作...)。我猜这是一年级学生的意思,是我写了“ #include“ mycppfile.cpp”;“ 在我的一些文件中。 我#include对cpp文件进行处理的原因是:-应该放在头文件中的所有内容都在我的cpp文件中,所以我假装它像头文件一样-以monkey-see-monkey do fashion的方式,我看到了其他头文件被#include放在文件中,所以我对cpp文件也做了同样的操作。 那么,我到底在做什么错,为什么不好呢?
147 c++  header-files 

2
#pragma是否曾经是C ++ 11标准的一部分?
传统上,避免C ++中包含多个标头的标准且可移植的方法是使用#ifndef - #define - #endif预编译器指令方案,该方案也称为宏保护方案(请参见下面的代码段)。 #ifndef MY_HEADER_HPP #define MY_HEADER_HPP ... #endif 但是,在大多数实现/编译器中(请参见下图),还有一个更“优雅”的替代方案,其作用与称为的宏保护方案相同#pragma once。#pragma once与宏保护方案相比,它具有多个优点,包括更少的代码,避免名称冲突以及有时提高了编译速度。 经过研究,我意识到尽管#pragma once几乎所有已知的编译器都支持伪指令,但是伪#pragma once指令是否属于C ++ 11标准还是有一定的困惑。 问题: 有人可以澄清#pragma once指令是否属于C ++ 11标准吗? 如果它不是C ++ 11标准的一部分,是否有任何计划将其包含在更高版本中(例如C ++ 14或更高版本)? 如果有人可以进一步详细说明使用这两种技术中的任何一种(例如,宏观卫士与#pragma once)的优势/劣势,那也很好。


9
C ++标头中的“使用命名空间”
在我们所有的C ++课程,所有的老师总是把using namespace std;在之后#include在它们的S .h文件。在我看来,这很危险,因为通过将标头包含在另一个程序中,我可能会将名称空间导入到我的程序中,而可能没有意识到,有意或不想要它(标头包含可以非常嵌套)。 所以我的问题是双重的:我是对的,using namespace不应该在头文件中使用它,并且/或者有某种方法可以撤消它,例如: //header.h using namespace std { . . . } 同样,还有一个问题:标头文件应该是#include其对应.cpp文件所需的所有标头,还是标头定义所需的所有标头,然后让.cpp文件#include剩下的标头,或者什么都不需要,并将其需要的所有内容声明为extern? 问题背后的原因与上面的相同:包含.h文件时,我不希望感到惊讶。 另外,如果我是对的,这是常见错误吗?我的意思是在现实世界中编程和在那里的“真实”项目中。 谢谢。

10
Makefile,标头依赖性
假设我有一个带有规则的makefile %.o: %.c gcc -Wall -Iinclude ... 每当头文件更改时,我都希望重建* .o。无论何时/include更改任何头文件,都不必重建依赖关系列表,而必须重建目录中的所有对象。 我想不出一种改变规则以适应这一需求的好方法,我愿意提出建议。如果不需要对标题列表进行硬编码,则可获得加分


5
C ++:命名空间—如何在头文件和源文件中正确使用?
考虑一对两个源文件:接口声明文件(*.h或*.hpp)及其实现文件(*.cpp)。 让*.h文件如下所示: namespace MyNamespace { class MyClass { public: int foo(); }; } 我已经看到了两种在源文件中使用名称空间的实践: *.cpp 显示练习1: #include "MyClass.h" using namespace MyNamespace; int MyClass::foo() { ... } *.cpp 显示练习2: #include "MyClass.h" namespace MyNamespace { int MyClass::foo() { ... } } 我的问题是:这两种做法之间是否有差异,是否认为其中一种更好?

3
.h和.m文件中@interface定义之间的区别
通常我们使用 @interface interface_name : parent_class <delegates> { ...... } @end .h文件和.m文件中的方法,我们综合了.h文件中声明的变量的属性。 但是在某些代码中,此@interface ..... @ end方法也保留在.m文件中。这是什么意思?它们之间有什么区别? 还提供一些有关.m文件中定义的接口文件的getter和setter方法的信息... 提前致谢

7
C ++头文件如何包含实现?
好的,无论如何都不是C / C ++专家,但是我认为头文件的目的是声明函数,然后C / CPP文件是定义实现。 但是,今晚复习一些C ++代码,我在类的头文件中找到了它。 public: UInt32 GetNumberChannels() const { return _numberChannels; } // <-- Huh?? private: UInt32 _numberChannels; 那么,为什么在标头中有实现?与const关键字有关吗?内联类方法吗?与在CPP文件中定义实现相比,以这种方式实现的目的/好处到底是什么?
76 c++  header-files 

4
在哪里可以找到off_t类型的完整定义?
我正在使用TCP从客户端向服务器发送文件。为了标记文件的结尾,我想在实际数据之前发送文件大小。因此,我使用stat系统调用来查找文件的大小。这是类型off_t。我想知道它占用了多少字节,以便可以在服务器端正确读取它。它在中定义 <sys/types.h>。但是我不明白这个定义。它只是定义__off_t or _off64_t为off_t。在哪里找__off_t?__头文件中大多数内容的前缀也是约定,当我阅读头文件以更好地理解它时,这使我感到恐惧。如何更好地读取头文件? #ifndef __off_t_defined # ifndef __USE_FILE_OFFSET64 typedef __off_t off_t; # else typedef __off64_t off_t; # endif # define __off_t_defined #endif

3
为什么我的include防护不能阻止递归包含和多个符号定义?
关于警卫的两个常见问题: 第一个问题: 为什么不包括保护我的头文件不被相互递归包含的保护措施?每当我编写如下内容时,我都会不断收到关于不存在的符号的错误,这些符号显然在那里,甚至是更奇怪的语法错误: “啊” #ifndef A_H #define A_H #include "b.h" ... #endif // A_H “ bh” #ifndef B_H #define B_H #include "a.h" ... #endif // B_H “ main.cpp” #include "a.h" int main() { ... } 为什么在编译“ main.cpp”时出现错误?我该怎么做才能解决我的问题? 第二个问题: 为什么不包括防止多个定义的防护措施?例如,当我的项目包含两个包含相同标题的文件时,有时链接器会抱怨某个符号多次定义。例如: “ header.h” #ifndef HEADER_H #define HEADER_H int f() { return 0; …

9
查找包含未使用的标头的工具?[关闭]
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow的主题。 7年前关闭。 改善这个问题 我知道PC-Lint可以告诉您有关包含但不使用的标头的信息。还有其他工具可以做到这一点,最好是在Linux上吗? 我们有一个庞大的代码库,在过去的15年中,已经看到了很多功能在移动,但是当功能从一个实现文件转移到另一个实现文件时,剩下的#include指令很少被删除,到这一点为止,我们仍然一团糟。显然,我可以做些艰苦的工作,删除所有的#include指令,让编译器告诉我要重新包含的那些指令,但我宁愿反向解决问题-查找未使用的指令-而不是重建已使用的指令列表。

17
C ++是否应该消除头文件?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6个月前关闭。 改善这个问题 Java,C#等许多语言不会将声明与实现分开。C#具有部分类的概念,但是实现和声明仍然保留在同一文件中。 为什么C ++没有相同的模型?头文件更实用吗? 我指的是当前和即将发布的C ++标准版本。
72 c++  header-files 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.