SORU
15 HAZİRAN 2010, Salı


C isteğe bağlı Parametreler ile Makrolar

C Makroları ile isteğe bağlı parametreler elde etmenin bir yolu var mı? Aşırı bir tür bence de çok iyi olacak.

CEVAP
15 HAZİRAN 2010, Salı


Bunu yapmanın bir yolu. Değişken listesinden iki kez, ilk yardımcının makro adı oluşturmak için, ve sonra bir yardımcı makro bağımsız değişkenleri geçirmek için kullanır. Makro değişkenler sayısını saymak için standart bir numara kullanır.

enum
{
    plain = 0,
    bold = 1,
    italic = 2
};

void PrintString(const char* message, int size, int style)
{
}

#define PRINT_STRING_1_ARGS(message)              PrintString(message, 0, 0)
#define PRINT_STRING_2_ARGS(message, size)        PrintString(message, size, 0)
#define PRINT_STRING_3_ARGS(message, size, style) PrintString(message, size, style)

#define GET_4TH_ARG(arg1, arg2, arg3, arg4, ...) arg4
#define PRINT_STRING_MACRO_CHOOSER(...) \
    GET_4TH_ARG(__VA_ARGS__, PRINT_STRING_3_ARGS, \
                PRINT_STRING_2_ARGS, PRINT_STRING_1_ARGS, )

#define PRINT_STRING(...) PRINT_STRING_MACRO_CHOOSER(__VA_ARGS__)(__VA_ARGS__)

int main(int argc, char * const argv[])
{
    PRINT_STRING("Hello, World!");
    PRINT_STRING("Hello, World!", 18);
    PRINT_STRING("Hello, World!", 18, bold);

    return 0;
}

Bu makro arayan kişi için daha kolay, ama yazar değil.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Angry Paintballer

    Angry Paintb

    8 Ocak 2012
  • Facebook Developers

    Facebook Dev

    24 ŞUBAT 2009
  • knopik96

    knopik96

    7 Mayıs 2011