24 Temmuz 2017 Pazartesi

Variadic Macro

__VA_ARGS__
Bu macro bir GNU extension. Bir metoda istediğimiz kadar parametre geçmek için şöyle yaparız.
#define chkErr(FUNCTION, ...)  \
    if(!FUNCTION(__VA_ARGS__)) \
    {                          \
        perror(#FUNCTION);     \
    }
Ancak bu kullanım hatalara sebep olabiliyor. Şöyle yapmak daha iyi.
#define chkErr(FUNCTION, ARGUMENTS) \
do                                  \
{                                   \
    if(!FUNCTION ARGUMENTS)         \
    {                               \
        perror(#FUNCTION);          \
    }                               \
}                                   \
while(0)

chkErr(someFunction,(12, 10));
//                 ^ (!)

Hiç yorum yok:

Yorum Gönder