[C++] #pragma once

看到一段代码使用了 #pragma once:

#if !defined(STRING_MANIPULATOR_H_INCLUDED)
#define STRING_MANIPULATOR_H_INCLUDED
#if _MSC_VER > 1000
    #pragma once
#endif // _MSC_VER > 1000
#endif // !defined(AFX_STRINGTOKENIZER_H__03F4D15A_A411_42B6_9F90_485B62939428__INCLUDED_)

#pragma once 目的和#ifndef#define#endif目的相同,防止头文件被重复包含。

#pragma once 是编译器选项, GCC3.4之前的版本不支持,而#ifndef受语言自身支持。

#pragma once 的缺点是,如果相同的文件分散在不同位置,编译器会以为它们是不同的文件。

使用#pragma once 的好处是,如果文件名改变,不需要作任何修改,但是如果使用#ifndef#define#endif 就要修改,造成维护的困难。绝大多数情况下, 使用#pragma once都能实现预期目的。

#ifndef MY_HEADER_HPP  // 如果文件名改变,也要修改MY_HEADER_HPP 
#define MY_HEADER_HPP
...
#endif

[1] https://stackoverflow.com/questions/787533/is-pragma-once-a-safe-include-guard

你可能感兴趣的:(C++)