При чтении исходного кода node.js я столкнулся с макросом, который я просто не могу понять.C++: сложное определение типа функции
// Strings are per-isolate primitives but Environment proxies them
// for the sake of convenience.
#define PER_ISOLATE_STRING_PROPERTIES(V) \
V(address_string, "address") \
V(args_string, "args") \
V(argv_string, "argv") \
V(async, "async") \
V(async_queue_string, "_asyncQueue") \
V(atime_string, "atime") \
...
* Я предполагаю, что переменные (например, address_string) определены в включаемый файл заголовка.
И все это продолжается некоторое время. Я посмотрел дальше код, чтобы узнать, как его можно использовать.
#define V(PropertyName, StringValue) \
inline v8::Local<v8::String> PropertyName() const;
PER_ISOLATE_STRING_PROPERTIES(V)
#undef V
Из того, что я могу понять, PER_ISOLATE_STRING_PROPERTIES (V) представляет собой функцию, как макрос, который принимает другую функцию, как макро V в качестве параметра. Я не получаю следующее:
1- PER_ISOLATE_STRING_PROPERTIES (V) задано несколько определений, и я не понимаю, как они используются в коде (например, когда PER_ISOLATE_STRING_PROPERTIES (V) отображается в коде препроцессором , как он знает, какой из V заменить его?)
2- Я не понимаю, как используется функция V.
См. [X Макросы] (http://en.wikipedia.org/wiki/X_Macro). – chris
Вы можете использовать 'gcc -E', чтобы увидеть результат после препроцессора. – timrau