Re[4]: include guards
От: Андрей Тарасевич Беларусь  
Дата: 21.01.22 16:54
Оценка:
Здравствуйте, pokutan, Вы писали:

P>>>извини, но это смешно. как только ты пишешь ifndef-endif — pragma once теряет смысл, т.к. препроцессору все равно нужно теперь парсить файл до конца, чтобы найти подходящий endif.

P>>>pragma once нужно использовать без конструкции ifndef-define. естесственно, если компилятор это поддерживает.

АТ>>Что за белиберда? O_o


АТ>>`#pragma once` обнаруживается препроцессором при первом парсинге файла, то есть тогда, когда его в любом случае придется парсить целиком. И если препроцессор поддерживает `#pragma once`, то он больше этот файл открывать и парсить не будет вообще. То есть все отлично работает именно так, как и хотелось автору кода.


АТ>>`#pragma once` никак не страдает от наличия ifndef-endif. И где она размещена — внутри ifndef-endif или снаружи — не имеет никакого значения. О каком "все равно нужно теперь парсить файл до конца" вы ведете речь?


P>Из википедии:

P>In the absence of #include guards around #include directives, the use of #pragma once will improve compilation speed for some compilers since it is a higher-level mechanism; the compiler itself can compare filenames or inodes without having to invoke the C preprocessor to scan the header for #ifndef and #endif.

Так это обычная чушь из википедии. Я уже опроверг ее в своем предыдущем сообщении.

Во-первых, википедия — "мусорный" источник. Поэтому не ясно, к чему вы здесь это цитируете.

Во-вторых, справедливости ради, можно попытаться сыграть "адвоката дьявола" и заметить, что в процитированном пассаже ничего не сказано о том, что будет "in the presence of #include guards", то есть процитированный пассаж совсем не несет того смысла, который вы ему пытаетесь навязать ))) Разумеется, это будет не более чем натягиванием совы на глобус, ибо на само деле в википедии просто написана чушь.
Best regards,
Андрей Тарасевич
Отредактировано 21.01.2022 17:02 Андрей Тарасевич . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.