# определить с пробелом - PullRequest
11 голосов
/ 04 марта 2011

Можно ли написать определение с такими пробелами, как:

#define replace to replacement here

Я хочу заменить " заменить на " на " замена здесь ".

РЕДАКТИРОВАТЬ:

Я хочу проверить приватные члены:

Я написал

#define private public

, но это не сработало для частных слотов в Qt

поэтому я намеревался использовать что-то вроде

#define private slots: public slots:

, так или иначе, я нашел другой способ проверить слоты, и, кстати, я знаю, что это уродливый хак.

Ответы [ 6 ]

10 голосов
/ 04 марта 2011

нет, вы не можете

#define identifier something

то, что вы определяете, должно быть идентификатором , которое не может содержать пробел. Также он не может содержать дефис, начинаться с цифры и т. Д. Вы можете определить только идентификатор

то, что вы написали, будет работать

#define replace to replacement here

но не так, как вы ожидаете. Эта строка определила replace для замены на to replacement here

НТН.

3 голосов
/ 28 ноября 2015

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

-Dprivate=public

Затем в своем модульном тесте вы сможете вызывать каждый закрытый метод вашего класса.

РЕДАКТИРОВАТЬ:

Я недавно заметил, что использование флага -fno-access-control на компиляторе gcc позволяет вам получить доступ к приватному методу или члену.Более подробную информацию по этой теме можно найти здесь: Модульное тестирование с -fno-access-control

2 голосов
/ 04 марта 2011

Нет, это невозможно. Почему бы просто не сделать это вместо этого:

#define replace_to replacement here
1 голос
/ 04 марта 2011

Вы могли бы сделать ...

#define replace replacement
#define to here

Остерегайтесь непреднамеренных побочных эффектов определений. Возможно, вы захотите #undef их после того, как они сделали свою работу.

0 голосов
/ 04 марта 2011

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

0 голосов
/ 04 марта 2011

вероятно нет. Он поймет, что первое слово после определения - это имя идентификатора, а остальное - его "тело".

...