Цитата(Litkevich Yuriy @ 27.11.2009, 19:52)
подстановку тела макроса, а телом является строка:
Q_DECLARE_INTERFACE(IFace, IId), в которую препроцессор ещё воткнёт аргументы и того получим:
Q_DECLARE_INTERFACE(IFace, IId)
тогда будет ошибка: идентификатор Q_DECLARE_INTERFACE не найден, вот код:
#define MOC
#ifndef MOC
#define EQUAL(A,B) (A)==(B)
#endif
#define EQUAL(A,B) EQUAL(A,B)
void main() {
int a = 3;
int b = 3;
bool f = EQUAL(a,b);
}
error C3861: 'EQUAL': identifier not found
ошибка же и тогда если закоментировать первую строку
updated:Глянул в исходниках кьют, теперь понятно
макрос то был не просто обьявлен, а с ифдефом тоже:
//#define MOC
#ifndef MOC
#define EQUAL(A,B) (A)==(B)
#else
#define EQUAL(A,B) EQUAL(A,B)
#endif
void main() {
int a = 3;
int b = 3;
bool f = EQUAL(a,b);
}
Тоесть как правильно было сказано во втором посте, максрос
# define Q_DECLARE_INTERFACE(IFace, IId) Q_DECLARE_INTERFACE(IFace, IId)
предназначен для MOC компилятора(или препроцессора, как там его называют...)