私は有効だと思う何か面白いことに出くわしました。まず:
コンパイラ/バージョン
$ gcc --version
gcc (Debian 4.7.2-5) 4.7.2
コンパイラ オプションと警告メッセージ。
$ gcc -c warn.c -o warn.o
warn.c:11:5: warning: initialization from incompatible pointer type [enabled by default]
warn.c:11:5: warning: (near initialization for ‘foo.exec’) [enabled by default]
「Foo()」が「exec」と互換性がない理由を知りたいです。(うまくいけば明確にするためにコメントを追加しました)
typedef struct Thing
{
void (*exec)(char *abc);
} Thing;
// ME: I don't mess with this.. I make const, K?
void Foo(const char *abc)
{
(void) abc;
}
// GCC: LOL, nope! probably u messed up.
Thing foo = { Foo };