-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