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

  • Dan Gately

    Dan Gately

    13 AĞUSTOS 2006
  • jesiel santos

    jesiel santo

    15 Ocak 2009
  • Truc Minh

    Truc Minh

    23 Ocak 2011