cpp Headers

internet-mail

Допустим, что необходимо создать некий заголовочный файл "filename.h "
прежде всего пушут такой каркас:

#ifndef filename_h (или _filename_h_, или __filename_h__)
#define filename_h(и т.д.)

blah-blah-blah
#endif


Народ, кто-нибудь может объяснить функциональную разницу в числе нижних подчеркиваний(нет, одно, два)?

margadon

никакой
просто программерам так проще
хотя... можно описывать количеством подчёркиваний степень "системности" и важности константы

maggi14

первая строчка проверяет макро на предмет, было ли оно уже определено. Вторая, соотв-но, определяет.
Как нетрудно понять, что там внутри - абсолютно неважно. Студия вообще всякую абракадабру трудночитаемую пишет.
но чем длиннее, мнемоничнее и т.д. макро - тем меньше шансов случайно совпасть с каким-нибудь другим. Это раз. И если текст в макро идет большими буквами и с подчеркиваниями, у читающего сразу будет рефлекс: это не переменная какая-нибудь, а макро.

zzzzzzzzzzz

Стандарт гласит:
17.4.3.1.2 Global names [lib.global.names]
1
Certain sets of names and function signatures are always reserved to the implementation:
— Each name that contains a double underscore (__) or begins with an underscore followed by an uppercase letter (2.11) is reserved to the implementation for any use.
— Each name that begins with an underscore is reserved to the implementation for use as a name in the global namespace.
Так что разница между первым вариантом и двумя следующими — допустимость побочных эффектов от конфликтов со стандартной библиотекой.

aleks058

А мне кажется, что это долбоебизм.
Всяко лучше написать
#pragma once 
и не страдать херней.

bobby

Это ни капельки не кроссплатформенно (не кросскомпиляторно ).
Оставить комментарий
Имя или ник:
Комментарий: