Форум программистов, компьютерный форум CyberForum.ru

Приведите 10 примеров непереносимого кода - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ контроллер видеомагнитофона http://www.cyberforum.ru/cpp-beginners/thread38555.html
как исправить класс для представления понятия "контроллер видеомагнитофона"(обеспечивает програмное управление видеомагнитофоном, который может осуществлять запись,вставить, извлечь кассету и проверить наличие кассеты, выполнять воспроизведение кассеты и осуществлть перемотку в указанном направлении что бы выводил на экран всё что надо как и что выводить в поток cout magnitofon.h #ifndef...
C++ Вычисления значений функции на отрезке [a; b] с шагом h Составить программу вычисления значений функции F(x) на отрезке с шагом h . Результат представить в виде таблицы, первый столбец которой – значения аргумента, второй – соответствующие значения функции: F(x) = sin2 x − cos 2 x . http://www.cyberforum.ru/cpp-beginners/thread38552.html
Определить колличество строк, не содержащих ни одного нулевого элемента C++
Помогите плз) чтобы получить итоговую нужно сдать 3 проги по С++. Сделать их сам не могу( не было на этих темах, парился в военкомате, по поводу отсрочки, будь она не ладна( Спасайте) Осталось 2 дня, чем быстрее будет решение, тем лучше, хоть как-то разберусь с прогами мб. 1) Дана целочисленная прямоугольная матрица. Определить колличество строк, не содержащих ни одного нулевого...
C++ Найти индекс первого элемента массива, модуль которого меньше всего отличается от 5
Найти элементы , модуль которого меньше всего отличается от 5 , номер первого такого элемента. Найти числа которые имеют наибольший остаток при делении на 5 и сообщ этот остаток.
C++ Сравнить члены вектора http://www.cyberforum.ru/cpp-beginners/thread38473.html
Как сравнивать члены вектора между собой? Например дан вектор: 000101010 Надо сравнить тройками чисел,т.е. 1-я тройка: 000 ->три 0 выводим 0 2-я тройка 101 -> две 1 и 0 выводим 1 3-я тройка 010-> два 0 и 1 выводим 0
C++ Числовой интервал Помогите плз, такая задача. Задан числовой интервал, вывести все простые числа и их кол-во. (интервал любой) подробнее

Показать сообщение отдельно
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16946 / 5351 / 329
Регистрация: 30.03.2009
Сообщений: 14,388
Записей в блоге: 26
06.06.2009, 13:03     Приведите 10 примеров непереносимого кода
Скажу тебе даже более того. Когда у тебя есть выражение, которое вроде бы как вообще ничего не делает, типа

C
1
2
float f1, f2;
f1 + f2;
То в "нормальном" случае компилятор невправе его выкинуть, потому как плавающая операция может выдать исключительную ситуацию (по сути дела сигнал). Но реально многие компиляторы по умолчанию работаю в так называемом режиме -fsimple (опция правда у всех по разному), при котором считается, что прерывания нам не нужны, всякие NaN'ы и прочая ересь - тоже. При таком допущении получается более быстрый код. Но это, мягко говоря, режим работы, противоречащий стандарту. Правда уже не стандарту языка Си, а стандарту плавающей ариметики IEEE-754

Добавлено через 4 минуты 37 секунд
Цитата Сообщение от CartmanRules Посмотреть сообщение
а можно объянить почему? а то я не понял
Такова семантика операции "&&" в языке Си
Т.е. "expr1 && expr2" означает вычислить expr1 и если оно не равно нулю (и только тогда) вычисляить expr2. Т.е. "expr1 && expr2" НЕ эквивалентно "expr2 && expr1"

В итоге для выражения "(a[i]>max)&&(max=a[i]);" сначала делается первая проверка (т.е. вычисляется expr1) и если она истинная, то только в том случае выполняется второе выражение. Т.е. семантически этот код эквивалентен "if (a[i] > max) max = a[i];", который, сам понимаешь, отработает одинаково независимо от оптимизаций

Я точно не уверен, но возможно в паскале (или это в бэйсике было) AND устроен по другому. Т.е. для "expr1 AND expr2" ВСЕГДА вычисляются оба выражения и только потом над ним делается AND

Добавлено через 2 минуты 38 секунд
Не знаю, как правильно это называется по научному, но в Си вычисление логического выражения пркращается сразу же, как только можно вычислить его значение. Операция "&&" обладает тем свойством, что если первое выражение ложь, то результат равен ложь независимо от второго выражения. Для "||" наоборот - если первое выражение равно истине, то второе уже не выполняется
 
Текущее время: 20:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru