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

  • booba1234

    booba1234

    22 Temmuz 2006
  • newreleaseblitz

    newreleasebl

    13 Ocak 2010
  • NYLON Video

    NYLON Video

    11 Aralık 2006