
warning: wrong type argument to increment
警告:voidポインタ++はgcc拡張機能
[-Wpointer-arith]
■1.ヒステリックな警告が大量にあると
昔、高速道路に乗ったら降りるまで
キンコンキンコンなり続ける
速度警報装置があって
眠気を誘発して事故が多発したそうだ。
ヒステリックな警告が大量にあると
プログラマは警告を無視するか、
機械的に警告を抑止するためだけのコードを書き始める。
■2.gcc -pedanticで警告される拡張機能の例
#include <stdio.h>
void f(void *p)
{
//注意:voidポインタ++はgccの拡張機能です。
printf("%p\n",p); p++;
printf("%p\n",p); p++;
printf("%p\n",p); p++;
printf("%p\n",p); p++;
}
int main(void)
{
f("12345678") ;
}
コンパイラや静的解析ツールによっては警告ではなくてエラーとするものもあります。
組み込み系のソフトウェアでは拡張機能を許さないプロジェクトもありますが、エンタープライズ系では拡張機能を積極的に使うところもあります。
拡張機能はプロジェクトのルールに従い使い分けましょう。
尚、gccのマニュアルには -pedantic オプションは “こだわりのある人々を満足させるためにのみ 存在している“と記載されています。
■3.[gcc pedantic 学者ぶった人々]で検索
⇒gccを作った人が言ってるのだから間違いないでしょう。
参考:gcc -pedantic
「GCCはANSI標準を正しくサポートしていない」と主張し始める学者ぶった人々を黙らせるためだけの目的で存在するものです。
http://www.asahi-net.or.jp/~wg5k-ickw/html/online/gcc-2.95.2/gcc_2.html
参考:clang -Weverything
https://quuxplusone.github.io/blog/2018/12/06/dont-use-weverything/