Как я могу заставить 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;
{
-Wnarrowing
может вам помочь. Также возможно clang tidy. - person Jesper Juhl   schedule 12.02.2018my_type::operator int() = delete;
(удалено? удалено? что-то в этом роде). Однако не помогает с системными типами, такими как ino_t. - person Goswin von Brederlow   schedule 12.02.2018-Wold-style-cast
и замените их приведением нового стиля, очевидно, проверяя, как вы это делаете. - person Richard Critten   schedule 12.02.2018