передача аргумента 2 отбрасывает квалификаторы из целевого типа указателя

У меня следующая проблема:

void send_Msg(const char* msg)
  {
  #if channel_free
      (void) din_send_msg(channel, msg); // (void) rcd_send_msg(int channel, char* msg);
  #else
      (void) cin_sendMsg(channel, msg);
  #endif 

(void) din_send_msg(channel, msg); выдает мне предупреждение. Передача аргумента 2 'din_send_msg' отбрасывает квалификаторы из целевого типа указателя.

Я знаю, что это потому, что din_send_msg принимает int и char* в качестве параметров и превращает мой const char* в char*. Изменение (void) din_send_msg(int channel, char* msg); на (void) din_send_msg(int channel, const char* msg); и присвоение const char* локальному указателю ничего не дало. Но есть большая вероятность, что я просто сделал это неправильно.

Как я могу справиться с этим предупреждением?

(И да, я обязательно должен избавиться от него, хотя это просто предупреждение)


person Larysa B.    schedule 16.09.2020    source источник
comment
Добро пожаловать в СО. Если вы можете изменить din_send_msg, чтобы ожидать указатель на константный символ, это было бы лучше. И это должно исправить это предупреждение. То же самое относится к cin_sendMsg, если у него такой же прототип.   -  person Gerhardh    schedule 16.09.2020
comment
Если вы уверены, что эти функции никогда не изменят содержимое памяти, вы также можете просто использовать приведение типов.   -  person Gerhardh    schedule 16.09.2020
comment
Проблема в том, что это не мой код :c И человек, который попросил меня найти решение, тоже ничего не знает. То есть он наш, но вокруг уже нет людей, которые знали бы, что это за код. Кроме того, в другом проекте с такими же функциями нет предупреждения. Что странно. И мы не смогли найти, как они там с этим справились.   -  person Larysa B.    schedule 16.09.2020


Ответы (1)


Что вам нужно сделать, так это, если функция din_send_msg ваша, и она точно не изменяет символы, на которые указывает указатель, это изменить прототип функции везде и повсюду, чтобы использовать

returntype din_send_msg(int channel, const char *msg);

Я не знаю, каков фактический тип возвращаемого значения функции.

Если вы не можете этого сделать, вы обычно можете использовать cast, чтобы отключить предупреждение:

din_send_msg(channel, (char *)msg);
person Antti Haapala    schedule 16.09.2020
comment
Сработало, спасибо :) Судя по всему, как новый пользователь, я не могу проголосовать :c - person Larysa B.; 16.09.2020
comment
Ну, конечно, вы можете заглушить предупреждение с помощью приведения. Но.... тьфу :/ Это ведь должно быть самое последнее средство? - person Kevin Boone; 16.09.2020