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

Моя основная функция такова:

int main(int argc, char const *argv[])
{
    huffenc(argv[1]);
    return 0;
}

Компилятор возвращает предупреждение:

huffenc.c:76: warning: passing argument 1 of ‘huffenc’ discards qualifiers from pointer target type

Для справки, huffenc принимает вход char*, и функция выполняется, при этом образец вводит "бессмысленность" через ./huffenc senselessness

Что может означать это предупреждение?

Ответ 1

Это означает, что вы передаете аргумент const функции, которая принимает аргумент не const, что потенциально плохо по понятным причинам.

huffenc, вероятно, не нужен аргумент не const, поэтому он должен принять const char*. Однако ваше определение main является нестандартным.

В стандарте C99 раздела 5.1.2.2.1 (запуск программы) указано:

Функция, вызванная при запуске программы, называется main. Реализация не объявляет прототип для этой функции. Он определяется типом возврата int и без Параметры:

int main(void) { /* ... */ }

или с двумя параметрами (называемыми здесь argc и argv, хотя любые имена могут быть используются, поскольку они являются локальными для функции, в которой они объявлены):

int main(int argc, char *argv[]) { /* ... */ }

или эквивалент; 9) или каким-либо другим способом, определяемым реализацией.

И далее...

... Параметры argc и argv и строки, на которые указывает массив argv , должны быть модифицированным программой и сохранять свои последние сохраненные значения между программой запуск и завершение программы.