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/////////////////////