[C] 매크로 함수 가변인자

[원본 링크]

printf 등의 함수 가변인자처럼, 매크로 함수에도 가변인자 적용이 가능하다.

매크로 함수 식에서 가변인자는 ...로 표시되며, 이건 __VA_ARGS__라는 특수하게 정의된 매크로로 전달될 수 있다.

그래서 printf 등의 가변인자 함수로 가변인자 처리를 떠넘길 수도 있다. 이런 식으로 image

image

뿐만 아니라 매크로 연결 '##'과 가변인자 전달 개수에 따라 인자의 위치가 달라질 수 있다는 것을 활용하면, 인자의 개수에 따라 매크로 함수를 오버로딩할 수도 있다. image

image 이러면 인자가 0일 때는 choice에 _, 2, 1, 0이 전달되므로 N은 0. 따라서 foo_0가 호출된다.

마찬가지로 인자가 1개 전달될 때는 _, ?, 2, 1, 0 다섯개가 전달되므로 N은 1. foo_1가 호출된다.

여기에 C11의 제너릭 셀렉션을 응용하면 복잡하고 요란한 함수 오버로딩을 구현할 수 있다.


참조
https://stackoverflow.com/questions/11761703/overloading-macro-on-number-of-arguments