Кресты / Говнокод #19753 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
typedef class foo_c{
...
} foo_t;

Почему мне хочется использовать такой синтаксис?

Запостил: mittorn mittorn, (Updated )

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

  • (deftype Foo [^:volatile-mutable lbar]
      IEditBar
      (get-bar [this] (. this lbar))
      (set-bar! [this val] (set! lbar val)))

    Почему мне хочется использовать такой синтаксис?
    Ответить
  • > Почему мне хочется использовать такой синтаксис?
    У нас в школе был чувак с фамилией долбач. В НАШЕЙ школе он протянул меньше месяца.
    Ответить
  • называется фантомные боли

    очень давно в сишке требовалось либо struct foo bar; при объявлении переменных типа структуры, либо то, как у тебя наверху добавить алиас через typedef, тогда можно алиас без struct

    но это было пару десятков лет назад
    Ответить
    • > было пару десятков лет назад
      Как там, в 2031?
      Или в С11 что-то поменяли с алиасами, а я пропустил.
      Ответить
      • заинтриговал, сейчас полезу смотреть
        (по факту, все сишные компиляторы, которые я оставил в прошлой жизни, вот эту ебалайку со struct не просили уже давно)
        Ответить
      • посмотрел, в с11 всё так же

        на правах оффтопа - нахуя?
        почему в С++ нет проблемы понять, что означает имя типа, а в С продолжают жрать кактус?
        Ответить
        • совместимость же. Да и в чем кактус, лень typedef написать?
          Правда в большинстве api в аргументах функций хладнокровно пишут struсt foo_c * foo без всяких typedefов, но у этих наркоманов свое оправдание есть - это чтоб пользователи сразу видели, структура там или простой тип.
          Ответить
          • совместимость с чем?
            если например вышел новый стандарт, то априори у тебя код не соберется старым компилятором

            > структура там или простой тип
            компилятору вообще насрать - он знает, сколько это занимает места, и кладёт копию на стек
            поведение структуры от int ничем не отличается
            Ответить
            • Для компилятора - не отличается. А тому кто пишет на си - очень важно, можно ли смело копировать этот foo_xz или там тыща байт внутри.
              Если struct - повод насторожиться, если не struct - скорее всего это очередной enum или просто int по старой традиции переопределили.
              Ответить
              • какая разница, смело или нет - если оно ожидается в параметрах функции в api как значение, компилятору (и => тому кто пишет на си) придется его туда скопировать, отменить ты это не сможешь

                анахронизм какой-то, неужели не очевидно
                Ответить
                • Как это не смогу? Не буду вызывать эту функцию.
                  А вот если она передается как указатель - я сразу буду знать, можно ли под нее локальную переменную выделить или не стоит и лучше только статическими делать или как-то еще экономить.
                  Ответить
              • ой, да ладно
                никто не пишет struct давно

                все его затайпдефали
                Ответить
            • > если например вышел новый стандарт, то априори у тебя код не соберется старым компилятором

              Старому коду как-то посрать на выход новых стандартов, речь идет об обратной совместимости.

              > поведение структуры от int ничем не отличается

              если говорить о плюсах, то для нетривиальных структур отличается.
              Ответить
              • > Старому коду как-то посрать на выход новых стандартов, речь идет об обратной совместимости.
                теперь я понял что ты имел в виду

                сишка позволяла, а долбоёбы с удовольствием пользовались тем, что теги структур и другие имена имеют непересекающиеся пространства имён
                struct S S;
                + есть фанатики этой "фичи"

                ну тогда да, им уже ничего не поможет
                Ответить
                • > struct S S;
                  Это сильно/как-нибудь мешает?

                  С помощью typedef можно задать типу произвольный псевдоним, т.е. он не будет выделенным словом, т.е. в грамматике будет той же сущностью, что и обычный идентификатор, т.е. парсер и так с этим трахается, ему хуже не будет.
                  int f(int s); // выделенное слово int
                  int f(my_int s); // typedef => трахаемся с идентификаторами
                  int f(s s); // ничем от предыдущего не отличается
                  Ответить
                  • > С помощью typedef
                    ты добавляешь тег структуры в пространство имен, где переменные и другие имена типов, и многие фанатики считают, что так делать харам

                    т.е.
                    // 1
                    struct S S; // now we have variable S of type "struct S"
                    
                    // 2
                    typedef struct S S;  // very very bad,  حرام
                    S s; 
                    
                    // 3
                    typedef struct S S;
                    S S;  // no u cant

                    введение разрешение на пропуск struct сделает "старый код" из п.1 нерабочим
                    Ответить
                    • А, всё из-за одного неймс пейса. Как-то нелогично это. Вот в питоне имя типа - какая-то rvalue, и есть смысл путать её с переменной, а тут они могли бы и не пересекаться.
                      Ответить

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

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8