gcc和g++

1.后缀名为.c的程序和.cpp的程序g++都会当成是c++的源程序来处理。而gcc不然,gcc会把.c的程序处理成c程序。

gcc -c xxx.cpp是不行的

2.对于.cpp的程序,编译可以用gcc/g++,链接可以用g++或者gcc -lstdc++。

我们经常用

#ifdef __cplusplus

extern "C"

{

#endif

xxx

#ifdef __cplusplus

}

#endif

以上内容可以在C++头文件中实现。但是编译C++.cpp文件的内容之前必须包含该头文件.

C和C++混合编程时,在C++的一些内容,我们可能需要用C来调用。表示以C规则来编译,以便c编译能够识别。

在链接时,因为C++有些特殊的内容,如cout函数C将找不到,因此使用gcc编译的时候需要包含c++的标准库-lstdc++.

g++ -c head.cpp

gcc -c main.c

gcc -o main main.o head.o -lstdc++(-lstdc++不要放在-o和.o之前)不管是库或者.o文件,我们依赖的文件(如-lstdc++)要放在后面,不然会出现编译找不到依赖文件里面的内容。

////////////////////head.cpp////////////////////////
#include <stdio.h>
#include "head.h"//没有这句话,编译找不到addFun
#include <iostream>
using namespace std;
int addFun(int a, int b)
{
        cout<<a<<"+"<<b<<"="<<a+b<<endl;
        return a+b;
}


//////////////////////////////head.h//////////////////////

#ifndef __HEAD_H__
#define __HEAD_H__
#ifdef __cplusplus
extern "C"
{
#endif

int addFun(int a, int b);
#ifdef __cplusplus
}
#endif

#endif


///////////////////////////main.c////////////////////////

#include "head.h"
int main()
{
        return addFun(22,33);
}

////////////////////////makefile/////////////////////

all:
        g++ -c head.cpp
        gcc -c main.c
        gcc -o main head.o main.o -lstdc++
clean:
        rm *.o main

你可能感兴趣的:(gcc和g++)