-Wc++compat
gcc にこんなオプションあるの知らなかった。
試しに付けて↓をコンパイルしてみると、
#include <stdlib.h> typedef struct hoge { int a; int b; } hoge_t; int main(void) { hoge_t *p = 0; p = malloc(sizeof * p); free(p); return 0; }
% gcc -Wall -Wextra -Wc++-compat test.c test.c: In function ‘main’: test.c:11: warning: request for implicit conversion from ‘void *’ to ‘struct hoge_t *’ not permitted in C++
C++ では、void * は明示的にキャストしないといけないんだった。
最近 C++ 書いてないから忘れちゃいました。というか、C++ で void * はあまり使わない気もするけど。
C++ としてコンパイルすると↓な感じでエラーに。
% g++ -Wall -Wextra test.c test.c: In function ‘int main()’: test.c:11: error: invalid conversion from ‘void*’ to ‘hoge_t*’ [1] 10979 exit 1 g++ -Wall -Wextra test.c