Адресация предупреждений шины о функциях, которые «не используются», когда они передаются в качестве параметров - PullRequest
0 голосов
/ 05 января 2009

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

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 или в руководстве .

Ответы [ 3 ]

2 голосов
/ 05 января 2009

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

2 голосов
/ 05 января 2009

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

0 голосов
/ 05 января 2009

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

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