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

    +98

    1. 1
    enum { SIZEOF_INT_AS_STR = sizeof("4294967295,")-1 };

    Что это? :-O

    Запостил: anmartex, 06 Апреля 2012

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

    • показать все, что скрытоЧувак, это рэпчик :-|
      Ответить
    • Вот это годно! Говнокод еще торт!
      Ответить
    • Видимо, автор наивно предполагала, что sizeof вернет длину строки... Ну как, для малых чисел будет работать. Да и для больших, если повезет, может пройти незамеченным.
      Ответить
      • а что, по вашему, тут возвращает sizeof?
        Ответить
        • Длину строки +1 на '\0'.
          Ответить
          • умильнее всего запятая в конце
            Ответить
          • Если там wchar по дефолту, то вернёт несколько больше, чем ожидается.
            надо sizeof("4294967295,")/sizeof("4")-1 :D
            Ответить
            • можно пример, когда литерал "123" будет не char[4], а wchar_t[4] (при sizeof(wchar_t) != 1)?
              Ответить
              • Зависит от используемой кодировки же.
                Objective-C (который является расширением языка C и сишный код с ним послностью совместим) - кодировка - utf-8:

                NSLog(@"test string size: %D", sizeof("123ƒ"));

                2012-04-06 14:56:37.996 test[4720:207] test string size: 6

                То есть попалась буква, отличная от английской - и привет.
                Ответить
                • является извращением языка Си
                  Ответить
                  • Это уже лично ваше мнение
                    Ответить
                    • показать все, что скрыто> Objective-C (который является расширением языка C
                      вот это - полная хуйня

                      не трогать волосатыми лапами мою сишечку!
                      Ответить
                      • ЛЮБОЙ сишный код является валидным Objective-C.
                        Чего нельзя сказать о C++.
                        Ответить
                        • чего только апплеёбы не скажут лишь бы оправдать покупку гламурной мабилы...
                          Ответить
                          • У меня Siemens A52
                            http://mobiguru.ru/f/image/8/2/0/8202_siemens_a52_1.jpg
                            В гробу я видал эти тормозные бесполезные "мабилы"
                            Ответить
                          • Трололо не засчитано, у меня нет ни одного эппловского устройства.
                            Ответить
                            • не верю, никто в здравом уме не буддет писать на Ejective-C не будучи загнан в вендор локин

                              может вы все просто стесняетесь это сказать?

                              напоминаю первый шаг - признать проблему
                              Ответить
                              • Хм... Ну в таком случае меня можно назвать программерской шлюхой - я пишу код на Objective-C за деньги :)
                                Ответить
                • это не тот пример
                  во-первых, то, что ты видишь 123ƒ как 4 символа лишь зависит от кодировки твоего редактора, для компилятора это всё такой же нормальный массив char из 5+1 элементов
                  и да, что в Obj-C считает для такой строки strlen (раз он так совместим)?
                  ну и во-вторых, wchar_t здесь как не было, так и нет
                  Ответить
                  • > ты видишь
                    Мы с вами не братались, но это так, лирическое отступление.

                    2012-04-06 16:39:23.594 test[4985:207] test string: sizeof 6; strlen 5

                    NSLog(@"test string: sizeof %D; strlen %D", sizeof("123ƒ"), strlen("123ƒ"));

                    Что делает неверным ваше предыдущее утверждение.

                    Конкретно про wchar_t - так и кодировка-то не та, чтобы символам вэчарами становиться, и не под виндой мы, в которуй она всё загоняет в эти самые wchar_t, находимся.
                    Ответить
                    • > Мы с вами не братались
                      ох ничего себе предъявы
                      вообще то дедуктивный анализ часового пояса приведенных логов намекает на http://bit.ly/Icl36N, так что снова фейл
                      Ответить
                      • гоу пшекохохлосрач!

                        "английские буквы" уже намекают нам
                        Ответить
                        • Не будет. Он ошибся в своём анализе :'-(
                          Ответить
                      • Простое включение мозгов говорит, что в результате анализа вас постиг фэйл. Так что хохлосрач отменяется.
                        Ответить
                  • Бонусом, принудительное указание типа строки

                    NSLog(@"test string: sizeof %D; strlen %D", sizeof(L"123ƒ"), wcslen(L"123ƒ"));
                    2012-04-06 16:49:34.156 test[5065:207] test string: sizeof 24; strlen 5
                    Ответить
                  • Хотя нет, надо признать мой эпик фэйл

                    NSLog(@"test string: sizeof %D; strlen %D", sizeof("123ƒ"), strlen("123ƒ"));
                    NSLog(@"test string: sizeof %D; strlen %D", sizeof("123f"), strlen("123f"));

                    2012-04-06 16:57:31.247 test[5104:207] test string: sizeof 6; strlen 5
                    2012-04-06 16:57:31.253 test[5104:207] test string: sizeof 5; strlen 4
                    Ответить
          • Ой, действительно... а я думал, sizeof(char *).
            Ответить
    • Это сколько надо выделять буфера для конверсии числа в строку чтобы стопудов хватило.
      Ответить
    • ИМХО, это какой-то долбанутый кодогенератор, зачем мерить длину такой строковой константы, ещё и в перечислении. Впрочем, независимо от того, ошибаюсь я или нет, говнище отменное...
      Ответить
    • Размер телефона? Ну примерно сантиметров 20х20х15, если настольный...
      Ответить
    • показать все, что скрытоvanished
      Ответить
    • На краю кровати безжизненным телом лежала Настя ее всю в сенниках, ссадинах и кровоподтеках трахал какай-то пидар.
      Ответить

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