Обработка предупреждений шины о функциях & # 8220; не используется & # 8221; пока они передаются как параметры

StackOverflow https://stackoverflow.com/questions/411726

  •  03-07-2019
  •  | 
  •  

Вопрос

В моей программе шиномонтаж предупреждает:

expat-test.c:23:1: Function exported but not used outside expat-test: start
  A declaration is exported, but not used outside this module. Declaration can
  use static qualifier. (Use -exportlocal to inhibit warning)
   expat-test.c:38:1: Definition of start

Функция start () используется . Программа использует XML-анализатор expat , который работает с обратными вызовами. Вы даете парсеру функцию:

XML_SetElementHandler(parser, start, end);

и синтаксический анализатор вызывает его в некоторых моментах. Это очень распространенная идиома в Си, и мне интересно, почему шина жалуется. Я ничего не нахожу в FAQ или в manual .

Это было полезно?

Решение

Вы вызываете XML_SetElementHandler () в том же модуле перевода (обычно это исходный файл .c), в котором определена start () ? В этом случае предупреждение может быть правильным: добавьте static к определению функции и проверьте, не продолжает ли ваше приложение ссылаться без ошибок.

Другие советы

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

Я склонен объявлять все функции, которые не экспортируются, как статические. Меня учили, и в настоящее время я считаю, что это хорошая практика. (Отказ от ответственности: как и в большинстве случаев, есть множество исключений из этого «правила».)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top