-Wsign-conversionとかこれを含む-Wconversionだと教えてもらえました。-Wallに入れておいてもらってもよかったよね…
$ cat main.c
#include <unistd.h>
int main(void)
{
size_t x;
char buf[42];
x = read(0, buf, sizeof(buf));
return (x < 1);
}
$ gcc -Wsign-conversion main.c
main.c: In function ‘main’:
main.c:8:13: warning: conversion to ‘size_t’ {aka ‘long unsigned int’} from ‘ssize_t’ {aka ‘long int’} may change the sign of the result [-Wsign-conversion]
8 | x = read(0, buf, sizeof(buf));
| ^~~~
明示的にキャストすれば怒られない。
$ cat main.c
#include <unistd.h>
int main(void)
{
size_t x;
char buf[42];
x = (size_t) read(0, buf, sizeof(buf));
return (x < 1);
}
$ gcc -Wconversion main.c
$ gcc --version
gcc (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0
Copyright (C) 2023 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-Wallがぜんぜんallじゃないの、いい加減なんとかして欲しい。
man ccとか長すぎて読みたくないんだよ!
QT: https://mastodon.zunda.ninja/@zundan/113812408727064458 [Ref.]
古のwarningがあったりいろいろあるらしい。確かに全部onにはできないな。
https://stackoverflow.com/questions/11714827/how-can-i-turn-on-literally-all-of-gccs-warnings#11720263
-Wall-allという楽しい名前のオプションの提案もあったらしい。
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=31573
が、そんなことより-Wyada-yada-yadaが駄々っ子ぽくて気になる。