#define (CLASS) в c ++ - PullRequest
       1

#define (CLASS) в c ++

1 голос
/ 11 ноября 2011

Я просматривал кодирование, выполненное в заголовочном файле программы, установленной на моем компьютере, и обнаружил следующее:

# define A( CLASS )                                                  \
B(CLASS)                                                             \
void                *D(const C*to);

Кто-нибудь может сказать мне, что это значит? для чего эти слэши и почему все это не написано в 1 строке? что значит (КЛАСС) здесь? & почему так много пробелов сделано?

Ответы [ 3 ]

5 голосов
/ 11 ноября 2011

\ просто добавляет операторы в двух разных строках. Это так же важно, как:

#define A(CLASS)  B(CLASS) void *D(const C*to); 

Это сделано, вероятно, только для лучшей читаемости.

2 голосов
/ 11 ноября 2011

Обратная косая черта предназначена для «защиты» новой строки - препроцессор отбрасывает и \, и новую строку при чтении в файле, помещая все это в одну логическую строку. (Ну, он также будет генерировать #line разметки, чтобы компилятор мог также генерировать достойные сообщения об ошибках.)

Кто-то подумал, что раскладка была более разборчивой, чем эта:

#define A(CLASS) B(CLASS) void *D(const C*to);

Если вы представите, что B, D и C, вероятно, заменены чем-то другим в файле, в выводе это будет выглядеть примерно так:

Monkey(Simian) void *Bananas(const sticks *to);

Должно быть, им было больше смысла, когда они писали макрос, вместо этого "видеть" это так:

Monkey(Simian)
void          *Bananas(const sticks *to);

Я не уверен, что это улучшение (и я думаю, что я ненавижу стиль), но, надеюсь, теперь это имеет смысл.

2 голосов
/ 11 ноября 2011

Косая черта \ означает, что определение макроса продолжается на следующей строке.В отсутствие \ следующая строка не будет рассматриваться как часть макроса, потому что по умолчанию макрос рассматривает только одну строку, в которой написано #define.

Это аналог [contd...], который многие люди часто используют на английском языке (особенно на онлайн-форумах), чтобы указать продолжение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...