Конкретная причина для следующего предупреждения - PullRequest
0 голосов
/ 12 марта 2010

Когда я компилирую код C в последней версии gcc, я получаю следующее предупреждение:

Function is define but not used.

В чем может быть причина этого предупреждения и как я могу подойти к его устранению?

Ответы [ 3 ]

2 голосов
/ 12 марта 2010

Компилятор предупреждает, что программист приложил усилия для написания чего-то, что никогда не используется.

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

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

Поскольку это не ошибка, дружественный компилятор выдает только предупреждение.

2 голосов
/ 12 марта 2010

Как сказал Джузеппе Геррини , это скорее всего для статической функции - вы не увидите этого предупреждения на нестатических. Причина в том, что компилятор должен предполагать, что нестатическая функция может быть вызвана из другого модуля компиляции. тем не менее, статическая функция не видна вне файла C, в котором она находится, поэтому, если она не используется в этом файле, она вообще не может быть использована.

Если меня раздражают эти предупреждения, потому что:

  1. Как правило, нет никаких отрицательных побочных эффектов от использования функции - даже кодового пространства. Большинство компоновщиков сегодня удаляют код из исполняемого образа, если он не используется.

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

  3. У меня может быть код, который вызывается только в отладочных сборках, как в утверждении (или некотором условно скомпилированном коде). Однако я не большой поклонник условной компиляции и хотел бы сократить использование операторов #if до как можно меньшего числа. Поэтому я предпочел бы, чтобы эти функции не были скомпилированы условно, даже если они были вызваны только в определенной конфигурации.

Насколько я понимаю, предупреждение не имеет смысла, и, возможно, можно отключить их, если хотите. (Я хотел бы услышать мнения, которые могут изменить мое мнение ...)

2 голосов
/ 12 марта 2010

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

Привет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...