1. Си / Говнокод #3979

    +136

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    #include <stdio.h>
    
    #define declare_generic_func(x)\
    x add_##x(x x1,x x2) \
    {\
    	return x1+x2;\
    }
    #define generic_func(x,name) name##_##x
    
    declare_generic_func(int);
    declare_generic_func(double);
    
    int main()
    {
    	int a,b;
    	double ad,bd;
    	printf("Enter two integer numbers: ");
    	scanf("%d%d",&a,&b);
    	printf("Result: %d\n",generic_func(int,add)(a,b));
    	printf("Enter two real numbers: ");
    	scanf("%lf%lf",&ad,&bd);
    	printf("Result: %lf\n",generic_func(double,add)(ad,bd));
    	return 0;
    }

    Дженерики для труЪ сишников.

    Запостил: frp, 14 Августа 2010

    Комментарии (7) RSS

    • >generic_func(int
      >generic_func(double
      >Дженерики

      да ну?
      Ответить
    • Оригинально!
      Ответить
    • Я не понял.
      Ответить
      • А что тут непонятного? Это реализация через жопу^W макросы чего-то подобного шаблонным функциям C++.
        Ответить
        • Не понял, что такого этом коде. Теперь понял.
          Ответить
    • Прикольно. Но без явного указания типа всё равно не обойтись.
      Как следствие придется писать
      declare_generic_func(char);
      declare_generic_func(float);
      declare_generic_func(unsigned int);
      declare_generic_func(long long); ... и прочее недостающее.
      Говоря терминологией Си++ получается, что работают только специализации.
      Ответить
    • Стандартная практика для педантов, т.е. для любителей корректного и аккуратного кода. Именно так это и должно делаться.
      Ответить

    Добавить комментарий