Русский комментарий можно увидеть издалека)))

Русский комментарий можно увидеть издалека)))
Вы смотрите срез комментариев. Показать все
189
DELETED
Автор поста оценил этот комментарий
Комментарий удален. Причина: данный аккаунт был удалён
раскрыть ветку (70)
153
Автор поста оценил этот комментарий
Иллюстрация к комментарию
раскрыть ветку (46)
109
Автор поста оценил этот комментарий

true - истина

false - ложь

Команда, написанная выше, заставляет компьютер воспринимать true как ложь. Это напрочь убьёт почти любую программу, и это очень сложно обнаружить.

пример: if (true) say(Вася). Программисту кажется, что всегда будет печататься Вася, а на самом деле - нет, т.к. мы подменили значение true с истины на ложь.

раскрыть ветку (45)
60
Автор поста оценил этот комментарий

Да не так уж это сложно обнаружить. Практически моментально можно понять, что блок if выполняется не так, как надо, посмотреть в дебаггере значение условия, увидеть, что там вместо true — false, вспомнить про "#define true false //счастливой отладки" и сделать соответствующий поиск.

раскрыть ветку (15)
55
Автор поста оценил этот комментарий

#define true (rand() > 0.001) // счастливой отладки...

раскрыть ветку (4)
53
Автор поста оценил этот комментарий

Не думаю, что это синтаксически правильно, но мысля хороша :3

Иллюстрация к комментарию
раскрыть ветку (2)
2
Автор поста оценил этот комментарий

В том случае, если rand() отдаёт число в диапазоне от 0 до 1, то эта конструкция будет вполне правильной.

раскрыть ветку (1)
5
DELETED
Автор поста оценил этот комментарий

Если rand() отдает любое число из любого диапазона, то конструкция будет синтаксически правильной в большинстве языков (кроме тех, где нельзя сравнивать целые с вещественными и нужно приводить типы явно, но таких языков немного).
Другое дело, что если мы говорим о языках, где rand() целочисленный, то условие будет равносильно rand() > 0 и, соответственно, в сишке, например, вероятность false-а падает раз в 30 относительно изначально задуманной вероятности.

6
Автор поста оценил этот комментарий

Уже лучше, и как же хорошо, что я пишу на шарпе.

5
Автор поста оценил этот комментарий

Значение чего смотреть собираетесь? Там не переменная за условие отвечает. Хотя найти проблему действительно сложно не будет.

раскрыть ветку (7)
3
DELETED
Автор поста оценил этот комментарий

Ну именно литералы true и false чаще всего присваиваются как раз таки переменным, а внутри условий и циклов пишутся более нагруженные смыслом вещи, чем просто true/false. Исключение, разве что, while(true), но и его обнаружить будет очень легко, т.к. такие вечные циклы обычно можно по пальцам пересчитать (где, помимо run-loop'а они еще распостранены?) и изменение условие на противоположное скорее всего моментально сломает всю программу, так что дебагером найти будет очень и очень просто



Чтобы отладка было действительно веселой нужно юзать что-то вроде

#define if(x) if(__LINE__ % 5 == 0 || (x))

либо

#define while(x) while(rand() %10 == 3 || (x))

ну или что-то попроще, типа

#define while(x) if(x)


Так ошибка будет вылезать в самых неожиданных местах, исправляться совсем, казалось бы, не связанными с проблемой действиями и в дебагере такое не увидишь, нужно только промежуточные файлы после препроцессора смотреть.


Хотя сейчас, конечно, большинство IDEшек по разному разукрашивают макросы и ключевые слова так что тоже не всегда сработает)

раскрыть ветку (6)
Автор поста оценил этот комментарий

[зануда]

первый вариант будет упрощен до 2х случаев: if (1), то есть выкинут нахрен, и if (x), и первый, соответственно, будет легко вычислен, если такая строка вообще попадется (рандом - другое дело)


третий вариант вообще не будет компиляться при do {} while();

[/зануда]

раскрыть ветку (5)
Автор поста оценил этот комментарий

if(...);

{

ололо

}

DELETED
Автор поста оценил этот комментарий
первый вариант будет упрощен до 2х случаев: if (1), то есть выкинут нахрен, и if (x), и первый, соответственно, будет легко вычислен

Не совсем понял, что ты имеешь в виду под "будет легко вычислен". По ворнингу компилятора о бессмысленном ифе? Если да, то в мало-мальски большом проекте их никто не читает, т.к. их лезет слишком дофига. Если их не дофига и их читают, то либо а) проект небольшой и веселый макрос будет замечен тупо глазами, либо б) процесы разработки выстроены грамотно со всякими код-ревью, аккуратными прагмами вокруг тех мест, где ворнинга не избежать и т.п. В этом случае веселый макрос тоже будет замечен после ревью твоего коммита коллегой.


С do {} while() ты прав - это я не подумавши написал)

раскрыть ветку (3)
Автор поста оценил этот комментарий
ворнинга как раз таки не будет, для сишки/крестов это легальная конструкция (привет do { } while(1) в макросах), найдется оно статическим анализатором, но речь не про это, а про то, что ошибка всегда будет в одном и том же месте в одно и то же вермя, нет рандомности, а уж если говроить про pure c, то там половина этих ифов будет проверкой указателя, и сегфолт на следующей после if строчке сразу же спалит всю контору

а вообще я не знаю в каких условиях это может прокатить, самая простая ide спалит подсветкой, не то что уж код ревью

раскрыть ветку (2)
DELETED
Автор поста оценил этот комментарий
это легальная конструкция (привет do { } while(1) в макросах)

Речь была про if. На if (true/false) компиляторы вполне себе ругаются без всякого стат. анализа ибо смысла в таких конструкциях нет и проверить их нетрудно. do { } while(10) - да, часто используется в сишке чтобы несколько команд завернуть в один макрос, либо в качестве костыля - замены try/catch (если много ошибок может возникнуть в коде, который должен за собой какие-то ресурсы освобождать - то этот кидающийся ошибками код оборачивается в ту конструкцию и тогда в случае ошибки можно брякнуть этот вайл, и ресурсы, таким образом, освобождать только 1 раз после ду-вайла).


речь не про это, а про то, что ошибка всегда будет в одном и том же месте в одно и то же вермя, нет рандомности,

Суть же не только в том, чтобы ошибка в разное время возникала. К тому-же, если в макросе с рандомом не сбрасывать сид, то возникать все будет тоже в одних и тех же местах.

Главная проблема с __LINE__ конструкцией будет в том, что в 90% попыток с дебаггером выяснить, почему все не работает, после того, как дебагер зайдет внутрь ифа, в который он не должен заходить, я (и думаю, не я один) первым делом кинулся бы проверять правильность условия путем ввода поп. переменных или чего-то подобного, тем самым сдвигая код с ифом ниже и переводя его рабочее состояние.


Итого, чтобы понять, что за хрень творится нужно будет догадаться просмотреть файлы после препроцессинга, либо просто догадаться поискать макросы с ифами.

А с рандомом, как раз, контора спалиться может даже легче, т.к. rand() - это вызов функции и тот факт, что дебагер на кадом ифе будет задерживаться на 2 шага, а если со step in-ом, то вообще прыгать в ебеня stdlib будет довольно палевным.


а вообще я не знаю в каких условиях это может прокатить, самая простая ide спалит подсветкой, не то что уж код ревью

Ну так то, подсветкой любые шаманства с макросами спалятся на раз-два, я об этом в самом первом комменте писал) Разве что подменять какие-то другие макросы можно, но тут особо не повеселишься.

раскрыть ветку (1)
Автор поста оценил этот комментарий
Речь была про if. На if (true/false) компиляторы вполне себе ругаются без всякого стат

https://godbolt.org/g/YKlEV8 да ну (первые 2 строчки показать что ворнинги вообще работают)? емнип все комплай-тайм вещи легальны,  и типа изначально предполагается что человек пишущий такое понимает зачем он это делает, а не просто так от балды, и это кстати достаточно плохо, что все перечисленные по ссылке выше опции не дают ворнингов в этом случае


я (и думаю, не я один) первым делом кинулся бы проверять правильность условия путем ввода поп. переменных или чего-то подобного, тем самым сдвигая код с ифом ниже и переводя его рабочее состояние.

имхо дело опыта


Итого, чтобы понять, что за хрень творится нужно будет догадаться просмотреть файлы после препроцессинга

и это туда же, для меня лично лезть в препроцессорный выхлоп забавно, быстрее в дизассемблер посмотришь, чем до такого додумаешься

DELETED
Автор поста оценил этот комментарий
Комментарий удален. Причина: данный аккаунт был удалён
раскрыть ветку (1)
2
Автор поста оценил этот комментарий

... и тут они решили обфусцировать regexp-ы.

3
Автор поста оценил этот комментарий

ага, это как я сделал коллеге автозамену запятой на "бля"

3
Автор поста оценил этот комментарий

Объясните дураку . 

Комп подменяет слова, ничего не печатает, или как?

раскрыть ветку (15)
16
Автор поста оценил этот комментарий
Представь себе, что у тебя есть две рации: одна принимает, а другая передаёт, ещё у тебя перед глазами висит инструкция: "Если принял "ДА" то передай "ПЕЧЕНЬКА" а если принял "НЕТ" то передай "КОРАБЛИК"."
Но когда ты снова пришёл на работу на листе с инструкцией сверху было написано "ЗАПОМНИ : "ДА" значит "НЕТ"!"
Когда тебе передали "ДА" ты вспомнил, что это значит "НЕТ" и передал "КОРАБЛИК" вместо "ПЕЧЕНЬКИ" так и здесь: #define значит "ЗАПОМНИ, что ... значит ..."
раскрыть ветку (2)
5
DELETED
Автор поста оценил этот комментарий

Проще говоря, это как с девушками.

раскрыть ветку (1)
1
DELETED
Автор поста оценил этот комментарий
Комментарий удален. Причина: данный аккаунт был удалён
8
Автор поста оценил этот комментарий
Вот код:

//

если Польша_стронг=true, то выведи_на_экран "Польша стронг!";

если Польша_стронг=false, то выведи_на_экран "Польша не стронг!";

//

Если код состоит только из этого и другой необходимой хрени, то если Польша стронг, то на экран выводится "Польша стронг!", а если нет, то "Польша не стронг!".

#define true false подменяет "true" на "false" и в любом случае Польша_стронг будет равно false и на экран будет выводиться "Польша не стронг!"

раскрыть ветку (5)
34
Автор поста оценил этот комментарий

KURWA!!! 

Автор поста оценил этот комментарий

так проще:)


выведи_на_экран ("Польша " + (Польша_стронг ? "" : "не")+ " стронг!");


в любом ведь случае выводить на экран, зачем плодить лишний код)

раскрыть ветку (3)
Автор поста оценил этот комментарий

Тем способом проще показать человеку несведущему в теме, чем твоим.

раскрыть ветку (2)
1
Автор поста оценил этот комментарий

да я понял, выёбываюсь просто)

Автор поста оценил этот комментарий
Тем способом проще показать, что один говнокодер способен запороть код другого говнокодера. Нахера сравнивать с true если есть возможность просто вставить саму переменную?
1
Автор поста оценил этот комментарий

Ага.

Директива define в С и С++ заменяет один текст на другой. С этим можно извращаться и дальше true/false, к примеру, #define 0 1

раскрыть ветку (1)
Автор поста оценил этот комментарий
А еще можно завести стринговую переменную и присваивать ей "True" или "False", а на питоне даж заводить ничего не надо
Автор поста оценил этот комментарий
ну не комп а если в разработке программы указать такую команду то весь код будет восприниматься неправильно. Истина будет ложью
раскрыть ветку (3)
DELETED
Автор поста оценил этот комментарий
Комментарий удален. Причина: данный аккаунт был удалён
раскрыть ветку (2)
1
Автор поста оценил этот комментарий
Ну я вобще далёкий от програмирования, с матанов на вы, просто суть здесь понятна
Автор поста оценил этот комментарий

Си шарп например может в препроцессорные команды, в джавке вроде нет, но мне кажется, что это зависит от IDE, а не компилятора.

Грубо говоря, препроцессор проходится еще до компиляции по тексту программы и заменяет все значения на дефайнутые, потом подает уже этот листинг в компилятор.

я думаю, лучше юзать const, из-за таких шутников, которые могут задефайнить в самой жопе своего кода какую-нибудь переменную, а она уже была задефайнена) но проверку на дефайн делать конечно же не надо, можешь не сомневаться, что переменная названная PI абсолютна уникальна:) Кстати, еще идея возникла для командных программистов игр: задефайнить PI = 3.05 например и смотреть на забавные эффекты:)

ещё комментарии
9
Автор поста оценил этот комментарий

# define private public // и всё тайное станет явным

раскрыть ветку (3)
5
DELETED
Автор поста оценил этот комментарий
Комментарий удален. Причина: данный аккаунт был удалён
раскрыть ветку (2)
4
Автор поста оценил этот комментарий

можно задефайнить какой-нибудь int на short или byte и ждать, когда переменная "вырастет":)

или так попробовать

#define define undefine

Иллюстрация к комментарию
Автор поста оценил этот комментарий

В первой строчке не "=", а "==". Бляяяя...

# define == =

14
Автор поста оценил этот комментарий

пошути над php программистом

раскрыть ветку (18)
93
Автор поста оценил этот комментарий

Над убогими не смеются

раскрыть ветку (17)
15
Автор поста оценил этот комментарий

А вот сейчас обидно было (нет)

раскрыть ветку (16)
14
Автор поста оценил этот комментарий

Да не воспринимай всерьез, какой шабаш программистов обходится без шуток за 300 про пхпшников?

раскрыть ветку (15)
2
Автор поста оценил этот комментарий
Шабаш джава программистов?
раскрыть ветку (9)
7
DELETED
Автор поста оценил этот комментарий
Они как всегда тормозят и опаздывают =\
раскрыть ветку (7)
12
Автор поста оценил этот комментарий

Это потому что они мусор собирают!

раскрыть ветку (6)
3
DELETED
Автор поста оценил этот комментарий

Наоборот же, сами они его вообще не собирают.

Автор поста оценил этот комментарий

По пинку его GC.collect() собирает.

раскрыть ветку (4)
3
DELETED
Автор поста оценил этот комментарий

в Java это System.gc(), причем он по пинку ничего не собирает, согласно спецификации он всего лишь повышает приоритет сборки мусора среди прочих операций, но ничего не гарантирует.

раскрыть ветку (3)
Автор поста оценил этот комментарий

Да, это .NET


Collect() Forces an immediate garbage collection of all generations. Неужели тут по пинку а в жабе нет?

раскрыть ветку (2)
Автор поста оценил этот комментарий

Шабаш Паскаль-программистов 

Иллюстрация к комментарию
1
Автор поста оценил этот комментарий

Да не, я все понимаю, хуже php программиста может быть только drupal-php погромист =-D

3
Автор поста оценил этот комментарий

 А можно шутку про паскаль?

раскрыть ветку (3)
3
Автор поста оценил этот комментарий

Я бы пошутил, если бы не юзал Double Commander каждый день :|

4
Автор поста оценил этот комментарий

в студию

раскрыть ветку (1)
9
Автор поста оценил этот комментарий

Да нет, я от @romku96 ждал, что он пошутит)


Могу только так, с юмором туго

Иллюстрация к комментарию
Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку