Заставить gcc предупреждать о явных преобразованиях

Как я могу заставить gcc (6.3) предупреждать о всех явных преобразованиях 64-битных в 32-битные, выполненных путем приведения (код C)?

  • Явные преобразования игнорируются флагом -Wconversion.
  • Я собираюсь скомпилировать очень большой и старый проект на 64-битную версию и знаю, что многие программисты злоупотребляют кастингом, и невозможно найти их всех вручную.
  • Парсинга кода недостаточно из-за множества пользовательских определений и структур, содержащих параметры, он должен быть на этапе компиляции.

например Как я могу найти этот тип проблем автоматически?

typedef long long my_type;
int foo()
{
  my_type f;
  ...
  return (int)f;
}

struct stat {
  ino_t st_ino;    /* 64bit Inode number */
... };

int foo2(){
  stat s;
  ...
  return (int)s.st_ino;
{

person IdolAdmin    schedule 12.02.2018    source источник
comment
С или С++? Да, ответ на самом деле может отличаться.   -  person StoryTeller - Unslander Monica    schedule 12.02.2018
comment
К сожалению, приведения типов в C, как правило, подавляют многие потенциально опасные действия. Это одна из причин, по которой следует избегать приведения типов.   -  person Jonathon Reinhart    schedule 12.02.2018
comment
Если вы собираетесь использовать C++, вы можете пойти до конца и использовать clang-tidy + cppcoreguidelines-pro-type-cstyle-cast, чтобы получить список всех приведений и исправить их одно за другим. Вероятно, вы можете заставить clang вывести список всех 32-битных преобразований в 64-битные, но это может потребовать некоторой работы.   -  person nwp    schedule 12.02.2018
comment
-Wnarrowing может вам помочь. Также возможно clang tidy.   -  person Jesper Juhl    schedule 12.02.2018
comment
В С++ вы не можете установить my_type::operator int() = delete; (удалено? удалено? что-то в этом роде). Однако не помогает с системными типами, такими как ino_t.   -  person Goswin von Brederlow    schedule 12.02.2018
comment
Попробуйте -Wold-style-cast и замените их приведением нового стиля, очевидно, проверяя, как вы это делаете.   -  person Richard Critten    schedule 12.02.2018
comment
Я компилирую c с помощью gcc (6.3)   -  person IdolAdmin    schedule 12.02.2018
comment
Единственное решение, которое я могу придумать, это настроить gcc так, чтобы он предупреждал о любом переходе с 64-битной на 32-битную. У вас есть предложения, как это сделать? С чего начать?   -  person IdolAdmin    schedule 12.02.2018