Параметр указателя был установлен, но предупреждение никогда не использовалось

У меня есть следующая функция:

void foo(char *ptr_1)
{
    char *ptr_2;

    bar(ptr_2);

    ptr_1 = ptr_2;
}

И получите это предупреждение:

параметр "ptr_1" был установлен, но никогда не использовался

Я понимаю, что предупреждение технически верно, но в то же время неактуально. Я мог бы подавить его с помощью:

(void)(ptr_1)

Но есть ли лучший способ?


person andrey    schedule 17.06.2015    source источник
comment
Но зачем ты его устанавливаешь? Предупреждение должно было привлечь ваше внимание, что вы, вероятно, хотели сделать что-то еще. Обычно мы не включаем в код инструкции, которые не влияют на выполнение.   -  person vbence    schedule 17.06.2015
comment
Компилятор пытается сказать вам, что последняя строка кода в вашей функции бессмысленна и бесполезна. Как это предупреждение может быть неактуальным?   -  person Lundin    schedule 17.06.2015


Ответы (3)


Это не является неуместным предупреждением, потому что присвоение не имеет никакого эффекта. Вы можете полностью удалить ptr_1 из кода без изменения его поведения. Ваш код эквивалентен этому:

void foo(char *)
{
  char *ptr_2;
  bar(ptr_2);
}

Другими словами, параметр функции ни для чего не используется. Если вы намеревались изменить указатель на стороне вызывающей стороны, вам нужно либо передать указатель на указатель и отменить ссылку на него, либо вернуть новое значение и позволить вызывающей стороне использовать его значение:

void foo(char **ptr_1)
{
    char *ptr_2;
    bar(ptr_2);
    *ptr_1 = ptr_2;
}

or

char* foo()
{
    char *ptr_2;
    bar(ptr_2);
    return ptr_2;
}
person juanchopanza    schedule 17.06.2015
comment
Большое спасибо. Я думал, что схожу с ума, и сразу же увидел, что я сделал, когда нашел это. - person Bob; 26.07.2019

Я понимаю, что предупреждение технически верно, но в то же время не имеет значения.

Ну и код здесь. С этой точки зрения вашего кода вы можете избавиться от самой инструкции-нарушителя.

Кроме того (мое личное мнение), почти всегда лучше иметь дело с предупреждениями, а не подавлять их. Они там по какой-то причине, в конце концов.

person Sourav Ghosh    schedule 17.06.2015
comment
Мне не нравятся некоторое предупреждение. Они плохие. - person Mohit Jain; 17.06.2015
comment
@MohitJain Согласен. Хотите верьте, хотите нет, но я читал этот конкретный вопрос давно, и поэтому я использовал почти в своем ответе. :-) - person Sourav Ghosh; 17.06.2015

Простой способ....

int dClock;//variable initiated without used anywhere.
dClock = dClock;//assign variable to itself to suppress not used warning.

работал в кейле!

person Sudarshan Patil    schedule 25.07.2019