标签: header-files

C++应该消除头文件吗?

许多语言(如Java,C#)不会将声明与实现分开.C#有一个部分类的概念,但实现和声明仍然保留在同一个文件中.

为什么C++没有相同的型号?拥有头文件更实用吗?

我指的是当前和即将推出的C++标准版本.

c++ header-files

70
推荐指数
9
解决办法
1万
查看次数

用于查找未使用的包含标头的工具?

我知道PC-Lint可以告诉你包含但未使用的标题.有没有其他工具可以做到这一点,最好是在Linux上?

我们拥有一个庞大的代码库,在过去的15年中已经看到了大量的功能,但是当功能从一个实现文件移动到另一个实现文件时,很少会删除剩余的#include指令,这一点让我们陷入了相当糟糕的状态.显然我可以去除所有#include指令并让编译器告诉我哪些重新包含,但是我宁愿反过来解决问题 - 找到未使用的指令 - 而不是重建已使用的指令列表.

c++ coding-style header-files

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

为什么我的包含防护不能阻止递归包含和多个符号定义?

关于包括警卫的两个常见问题:

  1. 第一个问题:

    为什么不包括保护我的头文件不受相互的,递归包含的警卫?我不断收到有关不存在的符号的错误,这些符号显然存在,甚至每次我写下类似的东西时都会出现更奇怪的语法错误:

    "啊"

    #ifndef A_H
    #define A_H
    
    #include "b.h"
    
    ...
    
    #endif // A_H
    
    Run Code Online (Sandbox Code Playgroud)

    "BH"

    #ifndef B_H
    #define B_H
    
    #include "a.h"
    
    ...
    
    #endif // B_H
    
    Run Code Online (Sandbox Code Playgroud)

    "的main.cpp"

    #include "a.h"
    int main()
    {
        ...
    }
    
    Run Code Online (Sandbox Code Playgroud)

    为什么我会收到编译"main.cpp"的错误?我需要做些什么来解决我的问题?


  1. 第二个问题:

    为什么不包括防止多个定义的警卫?例如,当我的项目包含两个包含相同标题的文件时,链接器有时会抱怨多次定义某个符号.例如:

    "header.h"

    #ifndef HEADER_H
    #define HEADER_H
    
    int f()
    {
        return 0;
    }
    
    #endif // HEADER_H
    
    Run Code Online (Sandbox Code Playgroud)

    "source1.cpp"

    #include "header.h"
    ...
    
    Run Code Online (Sandbox Code Playgroud)

    "source2.cpp"

    #include "header.h"
    ...
    
    Run Code Online (Sandbox Code Playgroud)

    为什么会这样?我需要做些什么来解决我的问题?

c++ c++-faq include-guards header-files

70
推荐指数
1
解决办法
2万
查看次数

默认成员值最佳实践

编写C++ 11代码以在类的头文件中为类成员设置默认值时,这是一种好习惯吗?

或者在类的构造函数中执行此操作更好?

编辑:

我的意思是:

foo.h:

#include <string>

using std::string;

class Foo{
    private:
        string greet = "hello";
    public:
        Foo();
};
Run Code Online (Sandbox Code Playgroud)

VS

foo.cpp(当然有必要的头文件,但没有类内初始化):

Foo::Foo(){
    greet = "hello";
}
Run Code Online (Sandbox Code Playgroud)

哪一个更好,为什么?

c++ constructor default-value header-files c++11

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

Objective C to Swift包含多个目标的头文件

我通过import语句成功地从Objective C(针对目标'MyApp')调用我的Swift类:

#import "MyApp-Swift.h"
Run Code Online (Sandbox Code Playgroud)

我现在创建了一个名为"MyAppLite"的新目标

当我编译新目标时,我得到错误,因为代码需要"MyApp-Swift.h",但编译器正在创建"MyAppLite-Swift.h"

所以,我需要为#import我正在编译的目标创建一个条件Swift/ObjC头.

如何做到这一点,还是有更好的方法?

objective-c header-files target swift

64
推荐指数
5
解决办法
2万
查看次数

哪里可以找到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 
Run Code Online (Sandbox Code Playgroud)

c sockets networking types header-files

63
推荐指数
4
解决办法
11万
查看次数

.dll,.lib,.h文件之间有什么区别?

为什么在项目中我应该包含一些*.lib,.h或其他一些文件?这些东西用于什么?

c++ windows dll header-files

62
推荐指数
2
解决办法
4万
查看次数

用C++编写头文件中的函数定义

我有一个有很多小功能的课.通过小函数,我的意思是不执行任何处理但仅返回文字值的函数.就像是:

string Foo::method() const{
    return "A";
}
Run Code Online (Sandbox Code Playgroud)

我创建了一个头文件"Foo.h"和源文件"Foo.cpp".但由于函数非常小,我正在考虑将它放在头文件中.我有以下问题:

  1. 如果我将这些函数定义放在头文件中,是否有任何性能或其他问题?我会有很多这样的功能.
  2. 我的理解是编译完成后,编译器将扩​​展头文件并将其放在包含它的位置.那是对的吗?

c++ performance header-files

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

如何创建C头文件

我希望能够在头文件中创建一个函数集合,我可以在我的一个C程序中#include.

c function header-files modular

61
推荐指数
1
解决办法
15万
查看次数

C++头文件如何包含实现?

好吧,无论如何不是C/C++专家,但我认为头文件的目的是声明函数,然后C/CPP文件来定义实现.

但是,今晚回顾一些C++代码,我发现这是在类的头文件中...

public:
    UInt32 GetNumberChannels() const { return _numberChannels; } // <-- Huh??

private:
    UInt32 _numberChannels;
Run Code Online (Sandbox Code Playgroud)

那么为什么标题中有实现呢?是否与const关键字有关?这是内联类方法吗?与定义CPP文件中的实现相比,这样做的好处/意义究竟是什么?

c++ header-files

59
推荐指数
4
解决办法
8万
查看次数