|
Аргумент в функции - was set but never used |
|
|
|
Jun 26 2017, 09:53
|
Профессионал
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075
|
Есть функция Код const char* PARSER_ParseBlock(const char* text, char* buf, uint32_t buf_size, uint32_t *text_type, char* block_start_addr) { char type = 0; char* b = buf; uint32_t s = buf_size; const char* p = text; for(;*p != 0; p++) { if(p[0] == 'S' && p[1] == 'O' && (p[2] == 'I' || p[2] == 'A')) // check start of block SOI-start of instraction, SOA-start of action { if (type != 0) // start of next block without end of previous, start over { b = buf; s = buf_size; } block_start_addr = (char*)&p[0]; type = p[2]; *text_type = type; p += 2; } else if(type) { // write in a buffer if (p[0] == 'E' && p[1] == 'O' && (p[2] == 'I' || p[2] == 'A')) // check end of block { if(type != p[2]) //end of block not this type { b = buf; s = buf_size; type = 0; } else { *b = 0; return p + 3; } } else if(s > 1) { // there is a place in buffer *b = *p; s--; b++; } else { *buf = 0; } } } *b = 0; return NULL; } При компиляции получаю Warning[Pe550]: parameter "block_start_addr" was set but never used Что то не могу понять где подвох.
|
|
|
|
|
Jun 26 2017, 10:14
|
Участник
Группа: Участник
Сообщений: 56
Регистрация: 3-11-11
Пользователь №: 68 126
|
Цитата(Jenya7 @ Jun 26 2017, 13:07) Я пользуюсь этим указателем снаружи для вычисления позиции в строке (idx = block_start_addr - text). Аргумент text_type я тоже передаю наружу *text_type = type; однако на него компайлер не ругается. Ну так ведь в одном случае вы записываете в саму переменную-аргумент (block_start_addr =), а в другом в переменную, на которую ссылается указатель (*text_type =)
Сообщение отредактировал conan - Jun 26 2017, 10:16
|
|
|
|
|
Jun 26 2017, 10:15
|
Знающий
Группа: Участник
Сообщений: 518
Регистрация: 29-09-11
Пользователь №: 67 450
|
Цитата(Jenya7 @ Jun 26 2017, 14:07) Я пользуюсь этим указателем снаружи для вычисления позиции в строке (idx = block_start_addr - text). Аргумент text_type я тоже передаю наружу *text_type = type; однако на него компайлер не ругается. но наружу это присвоение не действует! Меняется только копия, переданная в функцию, именно на эту несуразицу и ругается компилятор. А вот *text_type = type; записывает по адресу в text_type значение type.
|
|
|
|
|
Jun 26 2017, 10:29
|
Профессионал
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075
|
Цитата(Сергей Борщ @ Jun 26 2017, 15:24) указатель на то, что вы хотите менять. Желательно константный я хочу сохранить адрес если найден маркер (SOI,SOA) в block_start_addr. Переделал так const char* PARSER_ParseBlock(const char* text, char* buf, uint32_t buf_size, uint32_t *text_type, char** block_start_addr) И потом передаю в функцию char *pchr_start = 0; PARSER_ParseBlock(test_buffer, buf, 512, &type, &pchr_start);
Сообщение отредактировал Jenya7 - Jun 26 2017, 10:33
|
|
|
|
|
Jun 26 2017, 10:38
|
Знающий
Группа: Участник
Сообщений: 518
Регистрация: 29-09-11
Пользователь №: 67 450
|
Цитата(Jenya7 @ Jun 26 2017, 14:29) я хочу сохранить адрес если найден маркер (SOI,SOA) в block_start_addr.
Переделал так const char* PARSER_ParseBlock(const char* text, char* buf, uint32_t buf_size, uint32_t *text_type, char** block_start_addr) И потом передаю в функцию char *pchr_start = 0; PARSER_ParseBlock(test_buffer, buf, 512, &type, &pchr_start); а в функции: *block_start_addr = (char*)p;
|
|
|
|
|
Jun 27 2017, 04:41
|
Профессионал
Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757
|
Цитата(Lagman @ Jun 26 2017, 17:18) Я видел как делают другие, чтобы избавиться от этого предупреждения, надо в начале функции до всяких if написать block_start_addr = block_start_addr; Стандартный способ подавить предупреждения компилятора о неиспользуемом аргументе функции Код (void) block_start_addr; Можно написать в любом месте, но обычно пишут либо в начале, либо в конце, чтобы сразу бросалось в глаза.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|