То есть, например, если у двух разных файлов (с точки зрения pragma once) одинаковые имена include guard'ов — то "включится" только один, а в случае pragma once — оба.
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>Здравствуйте, Alca, Вы писали:
A>>То есть?
EP>То есть, например, если у двух разных файлов (с точки зрения pragma once) одинаковые имена include guard'ов — то "включится" только один, а в случае pragma once — оба.
Здравствуйте, Alca, Вы писали:
A>А зачем include guard'ы прагме?
Проблема в том, что
— #ifndef сбоит на разных файлах с одинаковым __THE_FILENAME_H__ (это может произойти по историческим причинам после переименования; из-за очепяток и копипасты; из-за небрежности в политике раздачи имён гвардов)
— будучи многострочной конструкцией, его можно повредить при слиянии версий после каких-нибудь жестоких правок
А, с другой стороны,
— #pramga once сбоит при подключении одного и того же файла по разным путям (симлинки, хардлинки, сетевые и дисковые пути, компилятору не хватило способностей канонизировать сильно запутанный путь с ../ и ./ )
Здравствуйте, Кодт, Вы писали:
К>- #pramga once сбоит при подключении одного и того же файла по разным путям (симлинки, хардлинки, сетевые и дисковые пути, компилятору не хватило способностей канонизировать сильно запутанный путь с ../ и ./ )
Плюс хаки вида:
— специальный undef для повторного включения (ну мало ли)
— проверка был ли включён header с конкретным guard'ом
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>Здравствуйте, Кодт, Вы писали:
К>>- #pramga once сбоит при подключении одного и того же файла по разным путям (симлинки, хардлинки, сетевые и дисковые пути, компилятору не хватило способностей канонизировать сильно запутанный путь с ../ и ./ )
EP>Плюс хаки вида: EP>- специальный undef для повторного включения (ну мало ли) EP>- проверка был ли включён header с конкретным guard'ом