Обработка предупреждений шины о функциях & # 8220; не используется & # 8221; пока они передаются как параметры
Вопрос
В моей программе шиномонтаж предупреждает:
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-файлов). Затем вы можете передать адрес другим единицам перевода, либо вызывая функции, либо возвращая адрес из функции, либо сохраняя его в глобальной переменной и т. Д.
Я склонен объявлять все функции, которые не экспортируются, как статические. Меня учили, и в настоящее время я считаю, что это хорошая практика. (Отказ от ответственности: как и в большинстве случаев, есть множество исключений из этого «правила».)