Notepad++
Ну или акельпад
Алексей
Для меня, на винде обязательная штука.
Алексей
Как и conEmu
Да с блокнотом это пиздец подъеба конечно. Берешь файлик с какого нибудь девайса с флешки или сд карты, садишься у клиента за любой доступный компьютер, думаешь щас я быстро его исправлю. А хуй...
Вот калькулятор они че-то переписали. На гитхабе его код лежит весь кривой и косой. иф в ифе это еще цветочки...
На хабре был разбор этого говнокода от микрософта. Лучше бы не позорились и не выкладывали его. Анализатор кода просто ревел со смеху
При том там в коде есть забавные условия которым не суждено исполнится. Но они зачем-то там есть
И оно даже как-то работает
Dimanche
Он Трейсит дед код
Он Трейсит дед код
Не там не дед код, но просто вероятность выполнения условия была околонулевой. Я уже не помню че там
Dimanche
Они в блокноте хуярят.
Ну и долбаебы че
Dimanche
вим бы поставили
Dimanche
Топ
Dimanche
За свои деньги
Не ну около нулевой и нулевой это разные вещи
Вот такое условие например как тебе
Кто так строки сравнивает блеать?
Dimanche
Попахивает говном
Dimanche
Но в си ++ там со строками беда вроде
Dimanche
Еще со времен си
Dimanche
Надо Биг бусти подключать
В данном случае сравнивают два указателя которые никогда не совпадут
Алексей
std::string вполне можно.
При том что этот калькулятор это помесь си и си шарпа
Dimanche
Я уже не помню че там в плюсах
m_resolvedName == L"en-US" - всегда будет фалс
Потомучто и то и то указатель
Они никогда не совпадудт
Алексей
char *str = "str"; if(str == "str") { std::cout << str << " == str\n"; }
Алексей
проверил.
char *str = "str"; if(str == "str") { std::cout << str << " == str\n"; }
В данном случае это сработает потому что компилятор оба "str" поместит по одному адресу
Dimanche
Душновато
Душновато
Прими душ
Dimanche
Прими душ
душный?
Anton
Пхп перлы и так далее
есть такое. потому у меня больше одного эклипса. один для с/++, другой для пхп/перл, третий для питона... :)
есть такое. потому у меня больше одного эклипса. один для с/++, другой для пхп/перл, третий для питона... :)
Да. Я потом тоже перешел на такую практику. Но поначалу хотелось иметь все в одном. По после парочки апдейтов понял что лучше так делать не стоит...
Anton
Notepad++
вскод. часто ставлю щас на винодовые серваки....
вскод. часто ставлю щас на винодовые серваки....
Тоже перешел недавно на такую практику. Это оказалось намного удобнее
Алексей
main.cpp:17:18: warning: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings]
что именно ты проверил таким образом?
У него if выполнился и он думает что это правильно. Ну не понимает человек что сравнивает не строки а их указатели
Алексей
Компилятор валит варнинг
Логично что он валит варнинг
Ты сравниваешь указатель *str с const char*
Anton
Компилятор валит варнинг
это ерунда, только что у тебя указатель не константный сравнивается с константной строкой
Алексей
У него if выполнился и он думает что это правильно. Ну не понимает человек что сравнивает не строки а их указатели
Я не говорю, что это правильно. Я говорю лишь то, что условие выполняется в ответ на это "m_resolvedName == L"en-US" - всегда будет фалс"
Я не говорю, что это правильно. Я говорю лишь то, что условие выполняется в ответ на это "m_resolvedName == L"en-US" - всегда будет фалс"
Все верно оно будет всегда фалс. Потому что строку ты получишь извне. А ты щас сделал глупости сравнив два одинаковых указателя
Не знаю как объяснить на популярном языке. Если не понял то забей
Тот кто знает что такое указатели - тот поймет
Это не понимают люди которые приходят в си с языков высокого уровня, где там перегруженные операторы == и так далее. Они думают что это нормально
Anton
char *str = "str"; if(str == "str") { std::cout << str << " == str\n"; }
проблема этого кода в том, что он может как тру так и фолс давать. зависит от того, оптмизирует компилятор константные строки или нет
проблема этого кода в том, что он может как тру так и фолс давать. зависит от того, оптмизирует компилятор константные строки или нет
Помоему даже при отключеных оптиизациях компилятор это сделает. Не будет он константы дублировать
Anton
у тебя две разные строки "str", которые находятся в константном сегменте данных. компилятор может это оптимизироват и будет одна строка, тогда будет тру. а может и де сделать, тогда фолс
Dimanche
кароче
Dimanche
как правильно напишите
Dimanche
а то че мусолить
Anton
ну я помню был. хотя может не у гцц :)
Anton
я в этом плане стар...
Perform interprocedural constant propagation. This optimization analyzes the program to determine when values passed to functions are constants and then optimizes accordingly. This optimization can substantially increase performance if the application has constants passed to functions. This flag is enabled by default at -O2, -Os and -O3.
Есть такой
Алексей
Ну да, мой косяк. Я думал разные строки, будут иметь разный адрес. А компилятор их объединил.
Anton
whether successive evaluations of a string-literal yield the same or a different object is unspecified
Вообщем какая разница. Так сравнивать даже в своем коде не надо. Потому что проект может быть скомпилирован на неправильном "gcc" и все поедет по пизде
Anton
However if you will write if ( "hello World" == "hello World" ) { //... } then the condition can yield either true or false depending on the corresponding compiler option.
Так вот какая эта "corresponding compiler option."
The Microsoft c++ compiler has the option GF to indicate string pooling.
Во точняк. В microsoft компиляторе я помню эту опцию
стринг пулинг
https://learn.microsoft.com/en-us/cpp/build/reference/gf-eliminate-duplicate-strings?view=msvc-170
А еще константу можно поменять на ходу и поломать всю программу
Не помню как в линуксах. В винде это делается просто. VirtualUnprotect - снимаешь со страницы RO, пишешь туда, VirtualProtect -
Anton
-fmerge-constants по идее у гцц
(string constants and floating point constants Интересно почему только стринги и флоаты. А обычные числа почему нельзя так же оптимизировать?
Anton
ULL по идее только 64 бита, что там оптимизировать особо то. ли ты про массивы? тем довольно опасно одинаковые адреса иметь, по идее