pragma
От: Аноним  
Дата: 13.04.06 10:07
Оценка:
Подскажите,чайнику,что означает #pragma once ?
Спасибо.

13.04.06 14:23: Перенесено модератором из 'MFC' — SchweinDeBurg
Re: pragma
От: NoFate Россия  
Дата: 13.04.06 10:25
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Подскажите,чайнику,что означает #pragma once ?

А>Спасибо.

Запрет дополнительных включений. Microsoft Specific.
Re[2]: pragma
От: NoFate Россия  
Дата: 13.04.06 10:25
Оценка:
Здравствуйте, NoFate, Вы писали:

NF>Здравствуйте, Аноним, Вы писали:


А>>Подскажите,чайнику,что означает #pragma once ?

А>>Спасибо.

NF>Запрет дополнительных включений. Microsoft Specific.


Точнее, повторных включений.
Re: pragma
От: Ovl Россия  
Дата: 13.04.06 10:26
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Подскажите,чайнику,что означает #pragma once ?

А>Спасибо.

MS specified форма следующего


#ifndef INCLUDE_H
#define INCLUDE_H

#endif


то есть говорить о том, что файл включается в единицу трансляции только один раз.
плюс в том, что обработка идет не на уровне дефайнов, и файл второй раз даже не подгружается
Read or Die!
Как правильно задавать вопросы
Как правильно оформить свой вопрос
Автор: anvaka
Дата: 15.05.06
Re: pragma
От: ksharenkov Россия  
Дата: 13.04.06 10:27
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Подскажите,чайнику,что означает #pragma once ?

А>Спасибо.

Включать данный файл только один раз дерктивой #include

ботее удобная замена конструкции

#if !defined(__XXXXXXX)
#define __XXXXXXX

your code here

#endif // __XXXXXXX


но нестандартная и непереносимая соответсявенно
Re: Что за компилятор?
От: Erop Россия  
Дата: 13.04.06 16:57
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Подскажите,чайнику,что означает #pragma once ?


Что за компилятор?

Встречал по крайней мере два варианта:

1) #pragama once в хедере говорит компилятору игнорировать повторные включения этого хедера при компиляции какой-нибудь единицы трансляции

2) #pragma once on или #pragma once off влияет на всю единицу трансляции. Если она on, то никакие хедеры в этой единице повторно не включаются.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[2]: Что за компилятор?
От: Кодт Россия  
Дата: 14.04.06 20:39
Оценка: +1
Здравствуйте, Erop, Вы писали:

E>2) #pragma once on или #pragma once off влияет на всю единицу трансляции. Если она on, то никакие хедеры в этой единице повторно не включаются.


Если она такая, то нужно очень аккуратно использовать. Вдруг где-нибудь есть код вида
#define PARAM value1
#include "parametrized.h"

#define PARAM value2
#include "parametrized.h"


Эх, было бы как в php... #include и #include_once...
Перекуём баги на фичи!
Re: pragma
От: B2BITS Украина http://www.b2bits.com
Дата: 15.04.06 09:13
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Подскажите,чайнику,что означает #pragma once ?

А>Спасибо.

// MS compatible compilers support #pragma once.
#if defined(_MSC_VER) && (_MSC_VER >= 1020)
# pragma once
#endif


Прелесть этой кухни в том, что файл повторно включаться даже не будет пытаться,
например, часто перед "ifndef/define/endif" находится огромный текст лицензии и т.п., которые препроцессор обрабатывает так или иначе,
в этом случае он такого делать не будет. Увиличится время компиляции (но совсем незаметно :-))

Такая конструкция так-же поддерживается gcc (как минимум тем, что в Mac OS X). Для кросс-платформенного кода рекомендуется использовать так:

#ifndef HEADER_FILE_HPP
#define HEADER_FILE_HPP

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

#endif
With regards, Vladislav Lazarenko.
Re[3]: Что за компилятор?
От: Erop Россия  
Дата: 15.04.06 11:39
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Если она такая, то нужно очень аккуратно использовать. Вдруг где-нибудь есть код вида


Скажу больше. Её вообще лучше использовать очень аккуратно
Скажем те, кто будут нести твой код на другой компилятор возможно не раз помянут тебя незлым тихим словом

Но в целом обычно есть какой-нибудь макрос для сождания нового исходника (у меня, например, он пишет туда кто создал когда, формирует стандартные комменты с описанием того, что должно быть в эсходнике и т. д.)
Вот он и формирует include guards
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[2]: pragma
От: Erop Россия  
Дата: 15.04.06 11:41
Оценка:
Здравствуйте, B2BITS, Вы писали:

BBI>Прелесть этой кухни в том, что файл повторно включаться даже не будет пытаться,

Но сейчас кэши файловой системы у компов большие, скорость работы синтаксического анализатора тоже хорошая, так что выигрыш какой-то мизерный возникает
Вот у меня обычно основное время занимает кодогенерация, а вовсе и нихрена не предварительный лексический разбор



BBI>Для кросс-платформенного кода рекомендуется использовать так:

BBI>
BBI>#ifndef HEADER_FILE_HPP
BBI>#define HEADER_FILE_HPP

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

BBI>#endif
BBI>

+++++++1!!!!!
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[3]: pragma
От: Vladislav Lazarenko Украина http://www.b2bits.com
Дата: 15.04.06 11:54
Оценка:
Здравствуйте, Erop, Вы писали:

E>Вот у меня обычно основное время занимает кодогенерация, а вовсе и нихрена не предварительный лексический разбор :)


Да оно у всех так, наверное. Когда большой проект собирается, я могу 15 минут смотреть на строчку "Generating code...".

E>+++++++1!!!!!


Я тоже так думаю :-) В Boost.Assign именно так извращаются ребята.
With regards, Vladislav Lazarenko.
Re[2]: pragma
От: remark Россия http://www.1024cores.net/
Дата: 15.04.06 23:27
Оценка:
Здравствуйте, B2BITS, Вы писали:

BBI>Здравствуйте, Аноним, Вы писали:


А>>Подскажите,чайнику,что означает #pragma once ?

А>>Спасибо.

BBI>
BBI>// MS compatible compilers support #pragma once.
BBI>#if defined(_MSC_VER) && (_MSC_VER >= 1020)
BBI># pragma once
BBI>#endif
BBI>


BBI>Прелесть этой кухни в том, что файл повторно включаться даже не будет пытаться,

BBI>например, часто перед "ifndef/define/endif" находится огромный текст лицензии и т.п., которые препроцессор обрабатывает так или иначе,
BBI>в этом случае он такого делать не будет. Увиличится время компиляции (но совсем незаметно

Сам не проверял, но слышал такую вещь, что современные компиляторы распознают include guards и поступают точно так же как и при #pragma once. Но это в принципе и не удивительно, потомучто сделать элементарно.


1024cores — all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[2]: pragma
От: remark Россия http://www.1024cores.net/
Дата: 15.04.06 23:28
Оценка: +1 :)
Здравствуйте, Ovl, Вы писали:

Ovl>Здравствуйте, Аноним, Вы писали:


А>>Подскажите,чайнику,что означает #pragma once ?

А>>Спасибо.

Ovl>MS specified форма следующего



Ovl>
Ovl>#ifndef INCLUDE_H
Ovl>#define INCLUDE_H

Ovl>#endif
Ovl>


Ovl>то есть говорить о том, что файл включается в единицу трансляции только один раз.

Ovl>плюс в том, что обработка идет не на уровне дефайнов, и файл второй раз даже не подгружается


Сам не проверял, но слышал такую вещь, что современные компиляторы распознают include guards и поступают точно так же как и при #pragma once. Но это в принципе и не удивительно, потомучто сделать элементарно.


1024cores — all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.