Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > #pragma once vs #ifndef #define #endif


Автор: Alastis 30.11.2004, 07:38
Чем отличаются директивы и чем следует пользоваться?

#pragma once

и

#ifndef
#define
#endif

Автор: shedon 30.11.2004, 08:13
Цитата(Alastis @ 30.11.2004, 04:38)
#pragma once

не каждый компилятор поддерживает...

Автор: Alastis 30.11.2004, 08:27
Значит если целевые компиляторы VC++ 7 или Intel C++, то можно пользоваться #pragma once без опасения?

Автор: bel_nikita 30.11.2004, 10:10
#pragma once - вставляется, грубо говоря, для того, что бы постоянно не производить компиляцию этого файла.

#ifdef == #if defined(...) - Если определено что-то
#ifndef == #if !defined(...) - Если не определено что-то

Блок #if всегда должен заканчиваться #endif. Также еще есть #else. Ну, я , думаю, это понятно.

Код

#ifdef __CHTO_TO__    // если определен __CHTO_TO__, то
 #define __FIGA__     // определяем __FIGA__  
#else                 // иначе
 #define __NE_FIGA__  // определяем __NE_FIGA__
#endif
По другому, это выглядит так:
Код

#ifndef __CHTO_TO__   // если не определен __CHTO_TO__, то
 #define __NE_FIGA__  // определяем __NE_FIGA__
#else                 // иначе
 #define __FIGA__     // определяем __FIGA__  
#endif
Еще подругому:
Код

#if defined (__CHTO_TO__)
 #define __FIGA__
#else
 #define __NE_FIGA__
#endif

И так далее. Можно просто #if (__CHTO_TO__ == 5). Т.е. если __CHTO_TO__ = 5, то делаем какое-то действие
В общем это язык препроцессора smile

Автор: Alastis 30.11.2004, 10:34
bel_nikita
Да, что означает #ifdef и т.д. я понялsmile
Но #pragma once я думал служит для замены #ifdef... в хэдере.
То есть, вместо

Код

#ifndef __MATH_VECTOR_H__
#define __MATH_VECTOR_H__
....
код

#endif /* !__MATH_VECTOR_H__ */


достаточно написать
Код

#pragma once


и все. Опять же увидел я это в рекомендацияхsmile

Автор: bel_nikita 30.11.2004, 10:46
не знаю, кто там, что рекомендует, но лучше, наверное, так:
Код
#ifndef __MATH_VECTOR_H__
#define __MATH_VECTOR_H__
#pragma once
....
код

#endif /* !__MATH_VECTOR_H__ */

Автор: Mad 30.11.2004, 14:59
Alastis
#pragma once даже с VC будет работать не пре всех настройках.
Цитата(bel_nikita @ 30.11.2004, 09:46)
Код
#ifndef __MATH_VECTOR_H__
#define __MATH_VECTOR_H__
#pragma once
....
код

#endif /* !__MATH_VECTOR_H__ */

хоть и получается "масло масленное" но согласен.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)