用g ++编译 - 包括头文件

时间:2014-08-06 12:59:36

标签: c++ header g++

我只是有一个简单的问题,因为我试图理解如何编译(在ubuntu 12.04中)包含简单头文件的c ++中的main。

命令:

g++ -o main main.cpp add.cpp -Wall

工作正常。但是,这让我对头文件的重点感到困惑。目前,我有一个简单的程序:

#include <iostream>
#include "add.h"
using namespace std;

int main () {


  int a, b;
  cout << "Enter two numbers to add together" << endl;
  cin >> a >> b;
  cout << "Sum of " << a << " and " << b << " is " << add(a,b) << endl;

  return 0;

}

我的&#34; add.cpp&#34;只是将两个数字加在一起。

头文件只是函数原型的替代品吗?我是否需要单独编译头文件,或者是否足以在命令行中包含所有.cpp文件?我知道如果我需要更多文件,则需要一个makefile。

2 个答案:

答案 0 :(得分:2)

#include预处理器代码只是将#include行替换为相应文件的内容,即代码中的add.h。使用g ++参数-E进行预处理后,您可以看到代码。

您可以在理论上将任何内容放在头文件中,并且该文件的内容将使用#include语句进行复制,而无需单独编译头文件。

您可以将所有cpp文件放在一个命令中,也可以单独编译并最终链接它们:

g++ -c source1.cpp -o source1.o
g++ -c source2.cpp -o source2.o
g++ -c source3.cpp -o source3.o
g++ source1.o source2.o source3.o -o source

修改

您也可以直接在cpp文件中编写函数原型(如NO头文件):

/* add.cpp */
int add(int x, int y) {
    return x + y;
}
/* main.cpp */
#include <iostream>
using namespace std;

int add(int x, int y);    // write function protype DIRECTLY!
// prototype tells a compiler that we have a function called add that takes two int as
// parameters, but implemented somewhere else.

int main() {
    int a, b;
    cout << "Enter two numbers to add together" << endl;
    cin >> a >> b;
    cout << "Sum of " << a << " and " << b << " is " << add(a,b) << endl;
    return 0;
}

它也有效。但是使用头文件是首选,因为原型可能在多个cpp文件中使用,而不需要在原型更改时更改每个cpp文件。

答案 1 :(得分:0)

在使用头文件(例如header.h)时,仅在存在时包括  在如上所述的目录中:

〜$ g ++ source1.cpp source2.cpp source3.cpp -o main -Wall