Обсуждение:Pragma once

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

При просмотре исходников библиотеки Boost, наблюдал подобный код:

#ifndef GRANDFATHER_H
#define GRANDFATHER_H

#if defined(_MSC_VER) && (_MSC_VER>=1020)
#pragma once
#endif

struct foo {
    int member;
};

#endif /* GRANDFATHER_H */

Может стоит заменить на него пример для совместного использования #pragma once и Include guard? Просто сам никогда такой конструкцией не пользовался, по этому не знаю, к чему она может привести. А Boost все-таки, как мне кажется, показатель.

gemza 07:44, 24 июня 2009 (UTC)[ответить]

Примечание:

_MSC_VER	
Evaluates to the major and minor number components of the compiler's version number. The major number is the first component of the period-delimited version number and the minor number is the second component. 

For example, if the version number of the Visual C++ compiler is 15.00.20706.01, the _MSC_VER macro evaluates to 1500.

In Visual Studio 2010, _MSC_VER is defined as 1600.

Т.о., предиректива _MSC_VER применяется только к версиям Visual Studio выше 1000

источник - http://msdn.microsoft.com/en-us/library/b0084kay.aspx

94.51.194.224 05:33, 1 июля 2011 (UTC) sanyok09[ответить]
  • В данном контексте применение директивы #pragma once почти бесполезно: при повторном включении она будет обработана только в том случае, если после первого включения переменная GRANDFATHER_H была отменена директивой #undef. Соответственно, роли в предотвращении повторного включении файла играть почти не будет. Tolic lich (обс.) 11:02, 14 августа 2018 (UTC)[ответить]