C言語(gcc?)の謎の振舞い
0引数の関数に、引数を渡して呼び出していても、コンパイルエラーを吐かない。なんでだろう。
マルチスレッドなプログラムを書いていて、謎のバグに悩まされており、0引数の関数に引数を1つ渡している(APIを変えたときに更新しわすれた)ところを発見して、それを消したらうまく動くようになったやっぱ動かなかった。あうあう
検証用コード。hogeを0引数で定義しているのに、 gcc -Wall でコンパイルしてもエラーがでない。
#include <stdio.h> #include <stdint.h> void * hoge(){ return NULL; } int main(int argc, char * argv[]){ hoge(100); printf("%d %d\n", (int)sizeof(int32_t), (int)sizeof(intptr_t)); return 0; }
これって有名な振舞い?なんでエラーにならないんだろ。