在头文件中我们使用预处理器制作包含保护,以便避免包含多个头文件,所以我们写道:
// mytest.h
#ifndef MY_TEST_H
#define MY_TEST_H
// code here
int foo() { return 0; }
#endif
// main.cpp
#define MY_TEST_H // example unintentionally we define it or it is defined in other header file that is included here in main right before inclusion of mytest.h
#include <iostream>
#include "mytst.h"
int main()
{
std::coutcout << foo() << std::endl; // foo(): undeclared identifer
return 0;
}
实现上述目的的另一种方法(避免多个头包含)并避免预处理器包含保护的缺点是在我们的头中使用pragma:
#pragma once
问题:pragma比包含警卫更强大吗?如果是这样,为什么人们还在使用包容警卫?