#ifndef MACRONAME_H #define MACRONAME_H .... #endifThe purpose of it is to disallow multiple redefinition. For example.
Person.h
//#ifndef PERSON_H_ //#define PERSON_H_ class Person { public: Person(); virtual ~Person(); }; //#endif /* PERSON_H_ */
Person.cpp
#include "Person.h" Person::Person() { } Person::~Person() { }
Employee.h
//#ifndef EMPLOYEE_H_ //#define EMPLOYEE_H_ #include "Person.h" class Employee : public Person { public: Employee(); virtual ~Employee(); }; //#endif /* EMPLOYEE_H_ */
Employee.cpp
#include "Employee.h" Employee::Employee() { } Employee::~Employee() { }
Main.cpp
#include <iostream> #include "Person.h" #include "Employee.h" using namespace std; int main() { Employee employee; return 0; }
Here, we included the Person.h twice, one in the Employee.h and the other one is in the Main.cpp. This code won't compile because C++ has One Definition Rule. If we uncomment the include guard part in the code, the code will compile just fine.
Microsoft Visual C++ has #pragma once for such purpose, but it's not a standard, thus not portable.
No comments:
Post a Comment