#c #c #gcc
#c #c #gcc
Вопрос:
Проект необходимо скомпилировать как в gcc4.1.2 (сервер компании), так и в gcc 4.7.3 (настольная система Linux), и возникают некоторые проблемы:
1. В gcc 4.1.2 нет Wno-unused-result
и Wno-unused-but-set-variable
. Я попытался заменить последние два на Wno-unused
, но по-прежнему генерирую игнорирующее возвращаемое значение ошибки встроенной функции.
2. Также нет Wno-narrowing
в gcc 4.1.2, есть ли что-нибудь еще, что я могу использовать?
Что я должен сделать, чтобы сделать их обоих счастливыми?
Комментарии:
1. Можете ли вы просто изменить код, чтобы предупреждение исчезло безвредным способом?
2. Исправление кода звучит как план или обновление сервера до чего-то, что не является цепочкой инструментов 7-1 / 2 летней давности. Конечно, вы могли бы передать результат
gcc --version
в свойство конфигурации в вашем make-файле и определить, какие CCFLAGS использовать из этого, но это быстро становится беспорядочным .3. Есть ли у вас доступ к make-файлам?
4. код, связанный с неиспользуемым результатом, заключается в вызове некоторых встроенных функций, таких как read(), write(). @WhozCraig У меня нет разрешения на обновление версии gcc. можете ли вы рассказать некоторые подробности о выборе gcc в соответствии с версиями gcc? У меня есть доступ к autoconf.ac и Makefile.am
5. Почему так важно, встроена функция или нет, если функция возвращает значение, вы должны использовать его, точка. Особенно с функциями ::read() и ::write().
Ответ №1:
Я бы посоветовал вам разобраться с различиями между двумя версиями в файле makefile. Вы можете определить версию GCC и праматически включить дополнительные параметры предупреждения, если версия GCC их поддерживает. Это поможет, когда компания, наконец, продвинется вперед.
Исправление кода стоит сделать, но не стоит затем не использовать предупреждения. Это то, что говорит вам о наличии проблемы в первую очередь (иначе вы бы не включили их правильно?)
В любом случае, вы можете обойти неиспользуемые предупреждения для системных функций, приведя результат к void, который, по мнению компилятора, вам следует игнорировать:
(void)builtin( ... );