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

 
 
 
Reply to this topicStart new topic
> warning от Keil, Что ему не нравится?
Метценгерштейн
сообщение Mar 24 2017, 15:00
Сообщение #1


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

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



Не вижу чего- то некорректного на картинке.

а такой код работает без варнингов.

Код
    case CMD_GET_FW_INFO:
            frame->data_1 = 0;            
        
            //uint8_t * ptr = &frame->data_2;
            //int size = sizeof(hex); // вернула 82 (0х52) байт
        
            memcpy (&frame->data_2, &hex, sizeof(hex));            
            uart_responce(length_unstuffed + sizeof(hex));
            break;


Первый вариант нельзя применять? В чем суть варнинга была?

Картинка- первый код. Споллер- второй код.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Палыч
сообщение Mar 24 2017, 15:08
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Транслятор не может определить область видимости объявленных переменных. В Вашем случае, наверное, лучше всего взять в скобки { ... } весь текст от case до break.
Go to the top of the page
 
+Quote Post
Метценгерштейн
сообщение Mar 24 2017, 15:31
Сообщение #3


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

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



это только кусок скрина. Там есть скобки и case несколько штук.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 24 2017, 15:35
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Метценгерштейн @ Mar 24 2017, 18:31) *
это только кусок скрина. Там есть скобки и case несколько штук.

Скобки там, а видимость надо ограничить тут. Прям вот на этом куске.
Go to the top of the page
 
+Quote Post
Метценгерштейн
сообщение Mar 24 2017, 17:28
Сообщение #5


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

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



т.е. эти переменные еще где-то видны за пределами этого case?
Из-за этого ругается?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 24 2017, 17:50
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Да, видны. Из-за этого и ругается.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Mar 24 2017, 17:51
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Метценгерштейн @ Mar 24 2017, 21:28) *
Из-за этого ругается?

Example:
Код
int main(void){
   int choice = 1;
   int z =1;
   switch(choice)
   {
     case 1:
       int y = 1;
       z = y + z;
       break;
     case 2:
     break;
   }
   return 0;

In the example, y is an initialized variable that is in scope (but unused) in the other cases.
The C++ Standard says in section 6.7:
Цитата
It is possible to transfer into a block, but not in a way that bypasses declarations with initialization. A program that jumps from a point where a local variable with automatic storage duration is not in scope to a point where it is in scope is ill-formed unless the variable has POD type (3.9) and is declared without an initializer (8.5).

Note
The transfer from the condition of a switch statement to a case label is considered a jump in this respect.
The usual way to fix this is to enclose the case that declares y in braces:
Код
case 1:   {
  int y = 1;
  z = y + z;
}
break;

Because y is a POD (Plain Old Data) type, so an alternative is to not use initialization:
Код
case 1:
int y;
y = 1;
z = y + z;
break;
Go to the top of the page
 
+Quote Post
Метценгерштейн
сообщение Mar 24 2017, 19:04
Сообщение #8


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

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



спасибо всем.
Go to the top of the page
 
+Quote Post

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

 


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


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