SORU
23 Ocak 2010, CUMARTESİ


C __VA_ARGS__ numaralı bağımsız işleyişi

Kendisi için net cevap bulamadım basit bir soru. Bağımsız değişkenleri bulmak için nasıl değişken variadic macros? Eğer bir çözüm varsa işleyişi boost ile Tamam duyuyorum.

Eğer bir önemi varsa, makro bağımsız değişken sayısı kadar basit sıra, liste, ya da yeniden işleme için bir dizi artırmak için dönüştürmek için çalışıyorum.

CEVAP
23 Ocak 2010, CUMARTESİ


Ben genellikle bu makro parametreler: bir sayı bulmak için kullanın

#define NUMARGS(...)  (sizeof((int[]){__VA_ARGS__})/sizeof(int))

Tam örnek:

#include <stdio.h>
#include <string.h>
#include <stdarg.h>

#define NUMARGS(...)  (sizeof((int[]){__VA_ARGS__})/sizeof(int))
#define SUM(...)  (sum(NUMARGS(__VA_ARGS__), __VA_ARGS__))

void sum(int numargs, ...);

int main(int argc, char *argv[]) {

    SUM(1);
    SUM(1, 2);
    SUM(1, 2, 3);
    SUM(1, 2, 3, 4);

    return 1;
}

void sum(int numargs, ...) {
    int     total = 0;
    va_list ap;

    printf("sum() called with %d params:", numargs);
    va_start(ap, numargs);
    while (numargs--)
        total  = va_arg(ap, int);
    va_end(ap);

    printf(" %d\n", total);

    return;
}

Tamamen geçerli C99 kodu. Tek bir dezavantajı var, ama - SUM() parametreler olmadan makro çağıramazsınız, ama GCC buna bir çözüm here bkz.

GCC durumunda böyle makrolar tanımlamak gerekir:

#define       NUMARGS(...)  (sizeof((int[]){0, ##__VA_ARGS__})/sizeof(int)-1)
#define       SUM(...)  sum(NUMARGS(__VA_ARGS__), ##__VA_ARGS__)

ve hatta boş parametre listesi ile çalışacak

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Baby Big Mouth

    Baby Big Mou

    5 Mart 2013
  • ecf150king

    ecf150king

    20 Ocak 2006
  • the one am radio

    the one am r

    6 Mayıs 2006