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

  • BrandonHarrisWalker

    BrandonHarri

    27 Kasım 2006
  • jocc talking shit

    jocc talking

    6 NİSAN 2007
  • TheScorpioTechno

    TheScorpioTe

    15 Aralık 2010