가변 매크로 호출을 "중첩 (nest)"할 수 있는지 궁금합니다. 나는 진정으로 GCC와 Clang에 관심이있다. 내 매크로 정의는 다음과 같습니다Variadic 매크로 : 붙여 넣은 토큰의 확장
$(array, addObject, obj);
작품의 감독 :
/**
* @brief Invoke an instance method.
*/
#define $(obj, method, ...) \
({ \
typeof(obj) _obj = obj; \
_obj->interface->method(_obj, ## __VA_ARGS__); \
})
나는이 편리 내 OO 프레임 워크 (
https://github.com/jdolan/objectively)의 "인스턴스 메서드를"전화를 사용합니다. 불행히도, 나는이 호출의 중첩을 허용하는 방법을 아직 찾지 못했지만, 어떤 경우에는 매우 유용 할 것이다. 예 :
/**
* @see MutableSetInterface::addObjectsFromArray(MutableSet *, const Array *)
*/
static void addObjectsFromArray(MutableSet *self, const Array *array) {
if (array) {
for (size_t i = 0; i < array->count; i++) {
$(self, addObject, $(array, objectAtIndex, i));
}
}
}
내포 된 호출이 결코 확장되지 않기 때문에 위의 중첩 된 가변 매크로 호출은 컴파일되지 않습니다. 이 문제를 해결할 수 있습니까? 아니면 이미 전 처리기를 한계까지 남용 했습니까? :)
', ##'트릭은 이식성이 없으며 gcc와 관련이 있습니다. –
알아. 그것은 Clang에서도 작동합니다. 그것들은 현재 내가 다루어야하는 유일한 두 개의 컴파일러입니다. – jdolan