Pavel
вот такой код: https://godbolt.org/g/5nhUVf почему при компиляции удаляется строка с if() ? Причем, если просто сравнивать с результатом constexpr - все нормально, при испольовании какой-либо математики типа & | - код с if() удаляется. у gcc 7.2 и clang-4.0 поведение одинаковое.
Pavel
если вызывать какую-либо внешнюю функцию, у которой аргументы constexpr - все хорошо, если static или inline - код так же удаляется
Pavel
нет. не будет. там есть внешняя переменная, значение которой на этапе компиляции не определено.
Egor
нет. не будет. там есть внешняя переменная, значение которой на этапе компиляции не определено.
Это неважно. Независимо от значения x выражение (x & 123) == 321 истинным никогда не будет.
Pavel
ок, можно изменить на адекватные значения, результат будет тот же.
Ioann_
замените, поглядим
Egor
Pavel
кстати, да, если ставить правильные числа, то все ок.
Berkus
Оптимизатор — молодец!
Pavel
я не ожидал, что сейчас даже такое просчитывается.
🦥Alex Fails
да блин, это же всего лишь битовая операция, которая могла считаться на этапе компиляции еще в pre-C++11
Berkus
где ты был все эти годы?
Pavel
на ARM. и без использования constexpr.
Berkus
а, опять древние гцц от codesourcery
Berkus
писали б под арм на современном шланге было бы проще
B
возможно ли на x86_64 кросскомпайлить cmake проект под arm какой-нибудь?
B
есть пример или гайд?
Berkus
ммм... несколько тысяч, тебе что именно непонятно?
Berkus
берешь тулчейн файл, прописываешь туда кросс-компилятор, собираешь
🦥Alex Fails
есть пример или гайд?
да просто сделай make с другим компилем
Pavel
писали б под арм на современном шланге было бы проще
дык, ядро не собирается современным clang/gcc . точнее, требуются некоторые правки в коде. да, ядро 3.16, ибо нового под эту платформу нет.
Berkus
есть пример или гайд?
https://github.com/metta-systems/metta/blob/develop/src/cmake/cross.toolchain выглядит примерно так
Alexander "SonnySlave"
сколько ему? лет 7?
Alexander "SonnySlave"
longterm: 3.16.51 2017-11-26
Berkus
есть пример или гайд?
https://github.com/metta-systems/metta/blob/develop/src/buildit.sh как вызывать cmake
B
найс, спасибо
Pavel
ну так свежий gcc (7) оно не поддерживает. Там даже gcc-5 надо впиливать: нету compiler-gcc5.h
Anatoly
По-хорошему, надо этот баг в conan зарепортить.
#conan #bug #nonlatin https://github.com/conan-io/conan/issues/2163
Dr. Friedrich
👍
Pavel
compiler-gcc5.h это что и зачем оно вообще было бы нужно
это спец. костылики для компиляции ядра определеллной версией компилятора, лежит в include/linux . в ядре 3.16 его нет -> не компилится этой версией компилятора.
Alexander "SonnySlave"
это спец. костылики для компиляции ядра определеллной версией компилятора, лежит в include/linux . в ядре 3.16 его нет -> не компилится этой версией компилятора.
немного поофтоплю, но всё же: А зачем вообще эти костыли нужны? Чего там в ядре такого, что не компилируется то?
🦥Alex Fails
завязки на GCC extensions
Vladislav
бэкпортни https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=71458cfc782eafe4b27656e078d379a34e472adf
Pavel
ну до этого я догадался... 🙂
Anonymous
помогите =) почему последнее слово файла дублируется? как избежать? ifstream file1("file.txt"); while (file1) { file1 >> buf; if (buf.length() > max_word.length()) { max_word = buf; } tmp_word += buf + " "; // cout << buf << endl; }
Anonymous
если getline юзать то все ок, но интересует именно чтение из потока по 1 слову
Anonymous
так и в чем мб проблема?
Anonymous
В сетапе
Anonymous
в сетапе чего?
Anatoly
в сетапе чего?
твоя проблема в том, что ты не проверяешь успех чтения ifstream file1("file.txt"); while (file1) { if( file1 >> buf ) { if (buf.length() > max_word.length()) { max_word = buf; } tmp_word += buf + " "; // cout << buf << endl; } }
Anonymous
пока не дошел до проверки наличия файла, тут не в этом ошибка, while (file » buf) работает
Anatoly
а, вообще, твои задачи уже решены стандартной библиотекой: auto it = std::max_element(std::istream_iterator<std::string>(std::cin), std::istream_iterator<std::string>(), [](auto&& a, auto&& b){ return a.size() < b.size(); }); if( it != std::istream_iterator<std::string>() ) { std::cout << *it << ": " << it->size(); }
Anonymous
а можете объяснить почему этот вариант работает а мой нет?
Anatoly
а можете объяснить почему этот вариант работает а мой нет?
уже объяснил выше "твоя проблема в том, что ты не проверяешь успех чтения"
Anonymous
кхм ок, мне казалось если указатель на конце файла должно что-то типа false вернуть в любом случае
Anatoly
кхм ок, мне казалось если указатель на конце файла должно что-то типа false вернуть в любом случае
считав последнее слово поток еще не прочитал конец файла, в итоге ты попадаешь по while(file) уже дойдя до конца, и читаешь EOF, при этом buf не меняется
Anonymous
о, спасибо, теперь понятно
Anatoly
Как это не прочитал, если это formatted input? После последнего чтения как раз eofbit и выставится.
std::string word; while(std::cin) { std::cin >> word; std::cout << word; std::cout << !!(std::cin); } выводит для ввода one two строку one1two1two0 это иллюстрация того, что я сказал. как видите, чтение последнего слова не взводит eofbit
Anonymous
А, извините. Он же тут же в цикле строки сцепляет, не заметил.
Anatoly
Ну вот :(
да чего ты :) шутка
Aidar
а туда eof не входит
Aidar
.eof() чекайте
Anonymous
operator ! и operator bool проверяют на fail()
Ну, в условии цикла тем же оператором же проверяется. Там как раз такой случай.
Anonymous
operator ! и operator bool проверяют на fail()
Кстати, failbit выставляется сентри, если eofbit уже стоит
Em Lee
Всем привет ребята )
🦥Alex Fails
прив
Em Lee
подкиньте статью интересную по c++ если можно
Egor
https://miyuki.github.io/2016/10/21/std-launder.html
Egor
Но это скорее хардкор, который особо не нужен.
Egor
подкиньте статью интересную по c++ если можно
Какого сорта интересную статью? Что уже точно скучно, а что точно интересно?
Em Lee
Какого сорта интересную статью? Что уже точно скучно, а что точно интересно?
Я только изучать начал, заинтересовал c++ ) по этому все что угодно, буду благодарен )