1 / 1 / 0
Регистрация: 09.04.2012
Сообщений: 101
|
||||||
1 | ||||||
Ошибка с оператором switch13.09.2013, 13:54. Показов 3049. Ответов 35
Метки нет (Все метки)
Добрый день! Я писала программу в VS2010, но потом появилась необходимость запустить программу в 2008. После запуска, она ругается на этот участок кода:
Не могу найти ошибку, копировала все. Помогите, пожалуйста!
0
|
13.09.2013, 13:54 | |
Ответы с готовыми решениями:
35
Загвоздка с оператором switch Программа с оператором SWITCH Программа с оператором switch Работа с оператором switch в цикле |
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|
15.09.2013, 13:33 | 21 |
Только ты прокомментировал моё сообщение, которое мало того, что было в другой теме, но относилось именно к языку C (моя вина, я этого в той теме сразу явно не указал).
А у меня — нет: Опять же, все подробности — в стандарте языка (C).
0
|
833 / 641 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
|
|
15.09.2013, 13:46 | 22 |
Потому что на неё дали ссылку...
Интересно, что в той теме (по крайней мере на указанной странице) я вообще не вижу указаний на Си. А вот обсуждаемый код помечен маркером "Код C++". Я же написал, что говорю о Си++. На Си никакой код с объявлением переменных не в начале блока у меня не компилируется. Сферический стандарт в вакууме - это хорошо, но немного не то, когда нужно чтобы код реально компилировался Добавлено через 2 минуты PS: Похоже, четвёртую страницу там не посмотрел... Но как я уже говорил, на Си VS подобный код не компилирует принципиально.
0
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|
15.09.2013, 13:58 | 23 |
Дело в том, что большая часть пользователей этого форума путает теги C, CPP, CSHARP, CPPQT, а также разделы, в которых создаются темы, поэтому часто приходится догадываться о происхождении кода по самому коду и/или по контексту. А код в стартовом сообщении именно что сишный (почти стандартный), несмотря на теги, в том смысле, что никаких плюсовых особенностей в нём нет.
Это потому, что четвёртая страница появилась только сегодня. Добавлено через 4 минуты Это не то что хорошо, это просто очень хорошо, и стандарта должен придерживаться каждый программист, который хочет писать кроссплатформенный код. На особенности конкретного компилятора рассчитывать в данном случае — значит губить всю кроссплатформенность на корню.
0
|
833 / 641 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
|
|
15.09.2013, 15:41 | 24 |
Эм.. В случае наличия скобок код компилируется везде и на обоих языках. В случае наличия точки с запятой в VS код не компилируется ни на одном языке. Даже если это соответствует стандарту, как раз использование этой фичи делает код непереносимым, а не наоборот. Известно, что в си переменные должны быть объявлены в начале блока, иначе код не компилируется кучей компиляторов. Не знаю, что в этом плане в стандарте, но по факту всё именно так.
0
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|
15.09.2013, 15:46 | 25 |
Я говорил не про конкретный случай.
Под переносимостью обычно понимают переносимость между разными платформами в пределах одного языка, а не переносимость C - C++, которая никому, в принципе, и не нужна. Уже 14 лет, как не должны быть.
0
|
833 / 641 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
|
||||||
15.09.2013, 15:57 | 26 | |||||
Ну если в GCC компилируется на Си, а в VS не компилируется, то при чём тут между языками?
VS2010 не компилирует этот код:
0
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|
15.09.2013, 16:02 | 27 |
А кто говорил, что в VS есть нормальная поддержка C(99)? Я такого не утверждал.
Если я не ошибаюсь, где-то в сети есть официальное подтверждение того, что Microsoft не заинтересован в поддержке языка C, и планирует поддерживать только C++ (с бекпортом отдельных фич в их реализацию C90).
0
|
833 / 641 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
|
|
15.09.2013, 16:06 | 28 |
Ну так я и говорю, что "сферический стандарт в вакууме" Это как раз и есть вопрос переносимости. Зачем призывать к использованию фич, которые делают код непереносимым? Даже если по стандарту они должны работать уже 14 лет...
На Си++ приведённый код компилируется нормально.
0
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|
15.09.2013, 16:11 | 29 |
Я заранее извиняюсь, если пошатну чью-нибудь психику следующим высказыванием, но предыдущий пример (и твоё сообщение) говорит не о том, что приведенный код некроссплатформенный (или непереносимый) — потому что это не так, а о том, что поддержка языка C у MS VS говняная. Я не пытаюсь оскорбить при этом сам компилятор VS и его разработчиков, потому что они сами не хотят его поддерживать.
Читать до просветления:
0
|
833 / 641 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
|
|
15.09.2013, 23:24 | 30 |
А в чём же тогда заключается переносимость, как не в возможности скомпилировать разными компиляторами?
Моя фраза относилось к В смысле что можно было бы и перенести в Си...
0
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|
16.09.2013, 00:44 | 31 |
Уже писал:
И ещё: … разными компиляторами ОДНОГО языка. А то, что ты понимаешь под переносимостью — это как если бы одну и ту же программу, к примеру, можно было скомпилировать с помощью компиляторов C++ и C#.
0
|
833 / 641 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
|
|
16.09.2013, 00:50 | 32 |
Нет. Под переносимостью я понимаю (в данном случае), что её можно скомпилировать и в GCC, и в VS на одном и том же языке (не важно каком именно - Си или Си++, но одном и том же для обоих компиляторов).
0
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|
16.09.2013, 01:32 | 33 |
Это не переносимость, это всего лишь значит, что программа написана на том подмножестве C, который понимает VS.
Переносимость же определяется стандартами языка, а не степенью поддержки этих стандартов конкретным компилятором. Точно так же я могу сказать, что скомпилированная на VS программа, написанная на C++, непереносима, т.к. она не скомпилируется на Turbo C++. Но ведь это не так, просто Turbo C++ не поддерживает современные стандарты. PS. Кстати, а почему ты ограничиваешься только двумя компиляторами?
0
|
833 / 641 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
|
|
16.09.2013, 01:51 | 34 |
Ну, есть ещё некоторые фичи VS, которые не поймёт GCC
Turbo C был давно и устарел. А я говорю о текущей версии VS, а не об устаревшей. VS и GCC - самые популярные компиляторы, насколько я представляю. А какие ещё стоит рассматривать?
0
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|
16.09.2013, 02:04 | 35 |
Только эти фичи будут нестандартными расширениями компилятора VS, непереносимыми априори. Я же говорил только о коде, который соответствует стандарту.
Можешь считать, что в текущих версиях VS поддержка C «устарела», так что аналогия имеет право на жизнь. Как минимум Clang. Добавлено через 9 минут Кстати, у GCC тоже есть куча именно языковых расширений, которые позволяют писать хоть и непереносимые, но такие вещи как libCello (компилируется GCC и Clang).
2
|
1 / 1 / 0
Регистрация: 09.04.2012
Сообщений: 101
|
|
18.09.2013, 12:47 [ТС] | 36 |
большое спасибо за статью
0
|
18.09.2013, 12:47 | |
18.09.2013, 12:47 | |
Помогаю со студенческими работами здесь
36
Работа с оператором Switch case Нужно написать программу с оператором switch Затруднения с условным оператором switch ( типы данных) Задача с оператором switch: юзер вводит значение температуры и видит на экране совет о том как одеться Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |