c++ 重复定义

来源:互联网 发布:淘宝助理5.5官方版 编辑:程序博客网 时间:2024/05/17 05:13

今天测试了一下C++下重复定义会出现什么问题,使用gcc和vs2010做了测试,两者的测试结果一样

一共有5个文件,2个头文件,3个cpp文件。内容分别如下

//redefine0.h
#ifndef _REDEFINE0_H_#define _REDEFINE0_H_#include<iostream>using namespace std;//变量声明和定义int i;         //错误int j=0;       //错误extern int k;  //正确extern int k=0;//错误//函数声明和定义void func()    //错误{}void fun();    //正确//类声明和定义class Dog      //正确{public:    void bark();};class Dog   //编译通过,最终输出和main中inlude顺序有关,先定义为准{public:    void bark(){cout<<"wang"<<endl;}};#endif

//redefine0.cpp
#include "redefine0.h"

//redefine1.h
#ifndef _REDEFINE0_H_#define _REDEFINE0_H_#include<iostream>using namespace std;//变量声明和定义int i;         //错误int j=0;       //错误extern int k;  //通过extern int k=0;//错误//函数声明和定义void func()    //错误{}void fun();    //正确//类声明和定义class Dog      //正确{public:    void bark();};class Dog   //编译通过,最终输出和main中inlude顺序有关,先定义为准{public:    void bark(){cout<<"wa"<<endl;}};#endif

//redefine1.cpp
#include "redefine1.h"

//redefine.cpp
#include "redefine1.h"#include "redefine0.h"int main(){    Dog d;    d.bark();}

在命令行下分别执行

cl redefine.cpp redefine0.cpp redefine1.cpp

g++ redefine.cpp redefine0.cpp redefine1.cpp

编辑得到的结果。

最后是类的定义的结果,目前没发解释,特地写博客记录一下