Как эффективно использовать #pragma один раз или #ifndef #endif? - PullRequest
6 голосов
/ 04 апреля 2011

Чтобы избежать многократного включения заголовочного файла, один из моих друзей предложил следующий способ

  #ifndef _INTERFACEMESSAGE_HPP
  #define _INTERFACEMESSAGE_HPP
  class CInterfaceMessage
  {
     / /Declaration of class goes here
  //i.e declaration of member variables and methods 
   private:
   int m_nCount;
     CString m_cStrMessage;
    public:
    CString foo(int);
 }
   #endif

, где _INTERFACEMESSAGE_HPP - просто идентификатор

, но когда я объявляю класс с помощью visual studio2005 IDE Я получаю утверждение как #pragma один раз в начале определения класса, когда я воспользовался помощью msdn, чтобы найти назначение #pragma, как только он дал мне следующее объяснение

"Указывает, что файл будетбыть включен (открыт) только один раз компилятором при компиляции файла исходного кода. "

Кто-то, пожалуйста, скажите, какой подход правильный?? Если оба они верны, то в чем разница?один подход лучше другого?

Ответы [ 3 ]

6 голосов
/ 04 апреля 2011

У gcc однажды прагма устарела. Вы должны использовать стандартные включить охранников. Все директивы прагмы по определению определены реализацией. Так что, если вы хотите переносимости, не используйте их.

4 голосов
/ 04 апреля 2011

Прагмы зависят от компилятора, поэтому я бы использовал #ifndef.

Директивы препроцессора разрешаются во время (фактически, перед) компиляции, поэтому они не влияют на время выполнения, за исключением, может быть, времени компиляции.

Тем не менее, вы никогда не заметите разницу во времени компиляции из этих двух альтернатив, если вы не будете использовать их несколько тысяч раз.

2 голосов
/ 04 апреля 2011

Первый подход - это общий подход, который работает со всеми компиляторами, а также более старый. Подход #pragma once зависит от компилятора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...