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

  • DeAdPiXel6667

    DeAdPiXel666

    2 Ocak 2010
  • tychoadragmire

    tychoadragmi

    20 Mart 2006
  • Virtual Riot

    Virtual Riot

    19 Mayıs 2011