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

    +2

    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
    #include <stdio.h>
    #include <math.h>
    
    #define SET(var, ...) typeof(__VA_ARGS__) var = __VA_ARGS__
    
    SET(p, &puts);
    struct point_t { double x, y; };
    SET(point, (struct point_t){0.0, 1.0});
    SET(anonymous, (struct{char *s;}){"hui"});
    
    int main(void)
    {
        static SET(msg, "Halo!");
        p(msg);
        SET(sqrt_of_2, sqrt(2));
        printf("√2 = %f\n", sqrt_of_2);
        return 0;
    }

    Автовывод типов в "C".

    Запостил: MPA3b, 20 Марта 2019

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

    • ИМЕННО ПОЭТОМУ Я ЗА "МОКРОСЫ".
      Ответить
    • typeof –— это вроде гнутое расширение? А как с этим дела в других реализациях?
      Ответить
      • В стандарт "C11" вроде бы добавили, ещё "tcc" подерживает некоторые гнутые расширения, включая это.
        Ответить
        • Поэтому я за "SFINAE".
          Ответить
        • Изучая особенности «tcc», случайно узнал, что у «gcc» и «tcc» есть __attribute__((regparm(n)). К сожалению, поддерживается только на x86-32 и n не может быть больше трёх (при n=3 используются EAX, EDX, ECX).

          То ли дело «Watcom C» с произвольными коллконвеншнами.
          Ответить
        • Нет, typeof -- gcc'изм. Но есть _Generic

          https://stackoverflow.com/questions/40143815/is-it-possible-to-implement-gnu-cs-typeofx-with-c11s-generic
          Ответить
          • Да, действительно, я перепутал. А жаль, удобная штука.

            Именно поэтому я за "GNU C".
            Ответить
    • Мне ещё понравилось struct{char *s;}. Мне кажется, тут с рахит-тинктурой языка что-то не так.
      Ответить
      • хм, я, похоже, нашёл ещё одну фичу "tcc": поля структуры можно описать в "составном операторе".
        Ответить
        • Поэтому я за "PHP".
          Ответить
        • // работает
          struct{float pitux, kooritsy[10];} kooryatneek = (struct{float pitux, kooritsy[10];}){3.14, {0.0}};
          
          // error: struct/union/enum already defined
          struct Kooryatneek {float pitux, kooritsy[10];} kooryatneek = (struct Kooryatneek{float pitux, kooritsy[10];}){3.14, {0.0}};
          
          // работает
          struct Kooryatneek {float pitux, kooritsy[10];} kooryatneek = (struct Kooryatneek){3.14, {0.0}};
          
          // работает
          struct Kooryatneek kooryatneek = (struct Kooryatneek{float pitux, kooritsy[10];}){3.14, {0.0}};
          Ответить
          • Но если куриц будет не 10, то соснёшь ты хуйца.
            Ответить
            • https://youtu.be/uqZ8ih3eZ5g
              Ответить
              • Что за язык в суптитрах?
                Ответить
                • Испанский (возможно, с примесью слов из других языков). Текст создан гугловской автоматической распознавалкой речи.

                  «Еби свою» бот распознал как «he visto un». Надмозг.
                  Ответить
                • Ещё примеры надмозга:
                  https://translate.google.com/#zh-CN|ru|八十万阿辉
                  https://translate.google.com/#zh-CN|ru|巴适哦我比四度

                  Нажми кнопку «Проговорить» на левой стороне.
                  Ответить
              • Какой грубый гость
                Ответить
    • Векторный петух, залогинься.
      Ответить
    • Ответить
    • В GCC для Си это уже есть готовое, называется __auto_type.
      Пролистай в самый низ страницы https://gcc.gnu.org/onlinedocs/gcc/Typeof.html
      > In GNU C, but not GNU C++, you may also declare the type of a variable as __auto_type. In that case, the declaration must declare only one variable, whose declarator must just be an identifier, the declaration must be initialized, and the type of the variable is determined by the initializer; the name of the variable is not in scope until after the initializer. (In C++, you should use C++11 auto for this purpose.)
      Ответить
      • Именно поэтому я загнуси.
        Ответить
        • Не для меня придёт весна,
          Не для меня Дон разольётся,
          И сердце девичье забьётся
          В восторге чувств не для меня.
          Ответить

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