llvm-g ++ - преобразование типов в стиле 4.2 и C ++ - PullRequest
3 голосов
/ 24 декабря 2011

У меня странная проблема. Я огляделся по всему stackoverflow.com и в других местах, но не нашел ответа.

Вот немного предыстории: я пишу простую библиотеку; в основном для образовательных целей и для лучшего понимания C ++. Я использую MacBook Pro со Snow Leopard. У меня также установлена ​​Xcode 4.2, однако я использую только VIM для редактирования своего кода. Я недавно закончил реализацию системы сборки GNU для всего, что у меня есть, так что мне больше не нужно зависеть от Xcode, и в то же время не нужно писать и поддерживать собственные Make-файлы. Я использую самые высокие уровни предупреждений. Вот флаги, которые у меня есть (но я продолжаю добавлять их постепенно, понимая причины каждого флага по мере использования): -Wall -Wmissing-field-initializers -Wno-trigraphs -Wreturn-type -Wnon-virtual-dtor -Woverloaded-virtual -Wmissing-braces -Wparentheses -Wswitch -Wunused-value -Wsign-compare -Waddress -Wsequence-point -Wshorten-64-to-32 -Wwrite-strings -Wold-style-cast и, наконец, -Werror.

Теперь у меня есть функция, которая очень просто возвращает значение:

wint_t weof() {
  return static_cast<wint_t>(WEOF);
}

Однако, когда я компилирую этот код, я получаю предупреждение «использование броска старого стиля». Я не понимаю, как static_cast<> может быть "в старом стиле". Может ли кто-нибудь объяснить мне, почему это происходит? Я думал, что найду ответ, посмотрев на определение WEOF, но на Mac оно определено как __DARWIN_WEOF, и я не могу найти его определение.

Спасибо!

1 Ответ

2 голосов
/ 24 декабря 2011

Скорее всего, сам макрос __DARWIN_WEOF использует приведение в старом стиле (при некотором поиске в Интернете кажется, что значение вероятно ((__darwin_wint_t)-1)).Если вы используете C-совместимые заголовки, маловероятно, что вы сможете полностью включить -Wold-style-cast.

. В качестве обходного пути вы можете попытаться окружить любой нарушающий код соответствующим #pragma для отключения этого предупреждения.

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wold-style-cast"
// ... code goes here ...
#pragma GCC diagnostic pop

Но через некоторое время это, вероятно, станет довольно утомительным / многословным ...

...