реклама на сайте
подробности

 
 
> Оператор switch() в avr-gcc, как это должно быть по стандарту?
ARV
сообщение Feb 22 2012, 09:05
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



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

в операторе switch допускается указывать до первого вхождения метки case любые операторы, то есть вот так МОЖНО (компилятор не ругается):
Код
switch(var){
   somevar = 12;
   case 0:
      // some code here
}


однако avr-gcc полностью игнорирует эти "предварительные ласки", даже если somevar объявлена как volatile

вопрос знатокам: есть ли тут какие-то ошибки, несоответствия стандарту и т.п. "нюансики"? если можно, но бесполезно - почему вообще можно? почему нет варнинга? если нельзя - почему нет ошибки? ну и так даее...


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ReAl
сообщение Feb 22 2012, 11:08
Сообщение #2


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(ARV @ Feb 22 2012, 11:05) *
в операторе switch допускается указывать до первого вхождения метки case любые операторы, то есть вот так МОЖНО (компилятор не ругается):
Код
switch(var){
   somevar = 12;
   case 0:
      // some code here
}
однако avr-gcc полностью игнорирует эти "предварительные ласки", даже если somevar объявлена как volatile

Вот как раз (кажется, во второй раз на этом форуме, но не нашёл предыдущего... а, может, это на другом форуме было)
http://electronix.ru/forum/index.php?s=&am...t&p=1030014
Предупреждение на строку somevar = 12; может быть максимум Unreachable code, т.е. такое же, как на
Код
int a;

void foo()
{
    goto lab1;
    {
        a = 0; // unreachable code и никакой volatile не поможет, тут может быть только определение static-объекта
lab1:
        a = 3;
        return;
        a = 4;  // unreachable code
    }
}


Цитата(ARV @ Feb 22 2012, 12:06) *
было -Wall... с вашим советом Warning появился, но какой-то странный: я сделал 2 строки с подобным кодом, но предупреждение выпало только на первую их них...
Есть предупреждения, которые выдаются только на одну строку. Тут — на первую строку фрагмента.
Ещё бывает «переменная может использоваться без инициализации».
Иногда он сам говорит, что предупреждение или ошибка выдаётся только на первое вхождение того, о чём ругань.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Feb 22 2012, 11:11
Сообщение #3


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(ReAl @ Feb 22 2012, 15:08) *
Ещё бывает «переменная может использоваться без инициализации».

т.е. если
Код
void foo()
{
    goto lab1;
    {
        int a = 0;//именно тот случай
lab1:
        a = 3;
        return;
        a = 4;  // unreachable code
    }
}
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ARV   Оператор switch() в avr-gcc   Feb 22 2012, 09:05
- - Xenia   А в каком случае вы хотели бы, чтобы выполнялась и...   Feb 22 2012, 09:14
- - ARV   речь не о том, чего бы я хотел, а том, как это пон...   Feb 22 2012, 09:20
|- - MrYuran   Цитата(ARV @ Feb 22 2012, 13:20) о беспол...   Feb 22 2012, 09:50
|- - ARV   Цитата(MrYuran @ Feb 22 2012, 13:50) Попр...   Feb 22 2012, 10:06
- - _Pasha   Там всё понятно написано КодEXAMPLE In the artific...   Feb 22 2012, 09:39
- - ARV   то есть писать можно все, что угодно, но по сути э...   Feb 22 2012, 09:40
- - _Pasha   Как это все что угодно? А декларации? Они не проиг...   Feb 22 2012, 09:43
|- - ARV   Цитата(_Pasha @ Feb 22 2012, 13:43) Как э...   Feb 22 2012, 09:57
- - _Pasha   Да. int i; имеет смысл, а int i =4; - не имеет.   Feb 22 2012, 10:00
|- - ReAl   Цитата(_Pasha @ Feb 22 2012, 12:00) Да. i...   Feb 22 2012, 11:12
- - ARV   ну не доходит до меня глубинный смысл милостивого ...   Feb 23 2012, 11:09
|- - GetSmart   Цитата(ARV @ Feb 23 2012, 16:09) ну не до...   Feb 23 2012, 13:26
|- - _Pasha   Цитата(GetSmart @ Feb 23 2012, 16:26) А я...   Feb 23 2012, 14:54
- - _Pasha   Почему ненужную? У этих объявлений просто нет испо...   Feb 23 2012, 11:54
- - _Pasha   Тема была не тут а на Шараге Собсна вопрос. Код#de...   Feb 24 2012, 05:42


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th August 2025 - 10:02
Рейтинг@Mail.ru


Страница сгенерированна за 0.01392 секунд с 7
ELECTRONIX ©2004-2016