Предупреждения о старом стиле с помощью макросов sys / select.h - PullRequest
3 голосов
/ 20 октября 2011

Я работаю над проектом, в котором используется код select from C ++. В коде используются макросы FD_ZERO, FD_SET, FD_ISSET и т. Д. К сожалению, эти макросы используют приведения 'C', поэтому они генерируют предупреждения компилятора при компиляции кода с -Wold-style-cast. Как лучше всего отключить -Wold-style-cast только для этих макросов?

Единственные варианты, которые я могу придумать:

  1. Используйте #pragma diagnostic, чтобы отключить предупреждение для функций с помощью макросов
  2. обернуть вызовы макросов во встроенную функцию и отключить предупреждение вокруг функции.

У кого-нибудь есть лучший подход?

1 Ответ

0 голосов
/ 26 октября 2011

Я использую select и эти макросы в коде C ++ с -Wall и не получаю предупреждений, хотя я не использую -Wold-style-cast.Я думаю, что лучшим подходом было бы сделать шаг назад и пересмотреть, почему важно не использовать броски в стиле C.Я думаю, что для взаимодействия со стандартными библиотечными функциями C это вполне уместно.

Метод C ++ dynamic_cast полезен для полиморфизма и классов.const_cast - это особый случай удаления константы.Кастинги static_cast и C (type) очень похожи.Я не уверен, какое преимущество при использовании static_cast<type> обеспечивает более (type) приведений, за исключением того, что это в стиле C ++.reinterpret_cast<type> предлагает небольшое преимущество по сравнению с методом *(type*)& C и является примерно таким же уродливым, как и они.

В общем, необходимость в приведении подразумевает определенный недостаток в разработке программного обеспечения, хотя dynamic_castвозможно, исключение из этого.Хотя похвально стремиться не нуждаться в приведениях в своем собственном коде, я не думаю, что имеет смысл пытаться задним числом применять эти значения к сторонним библиотекам, особенно к стандартным или ОС.

Есливы действительно не хотите использовать приведение в стиле C в вашем коде, я бы установил политику вне настроек компилятора и просто просмотрел ваш код и удалил их.Если вы действительно хотите, чтобы компилятор выполнил эту работу за вас, вам придется отключить предупреждение для программного обеспечения, которое вы не можете контролировать.Это может быть больше работы, чем это стоит, а в некоторых случаях даже не нужно.Например, в Дарвине FD_ISSET не имеет приведений в своей реализации.В конце концов, существуют гораздо худшие практики, чем приведения в стиле C, чтобы исключить код.

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