Kazuhiro NISHIYAMA wrote:
>>cfunc.c:280: warning: 'cdecl' attribute directive ignored
>>cfunc.c:439: warning: 'stdcall' attribute directive ignored
>>
>>というwarningが大量にでますが、以下のようなパッチでどうでしょうか?
> 
> callback.hの方でもwarningがでていたので、
> そちらも対処してみました。

この件について、cygwinでは現状ではうまくいかなそうなので質問があります。
FUNC_CDECL,FUNC_STDCALL は configure によって生成される config.h 内で
定義され、cygwin/gcc では次の通りです。

#define FUNC_STDCALL(x) x __attribute__ ((stdcall))
#define FUNC_CDECL(x) x __attribute__ ((cdecl))

これはプロトタイプ宣言として、

__attribute__ ((stdcall)) void foo(int i);
void foo(int i) __attribute((stdcall));

のどちらでもcygwinのgccは受け付け、configure ではプロトタイプ宣言しか
チェックしていないので問題となっていません。
しかし、以下のように関数を定義するときには後ろに __attribute__ を付ける
とエラーとなってしまいます。

void foo(int i) __attribute__((stdcall))
{
}

int main(int argc, char *argv[]){
  foo(10);
  exit(0);
}

逆に、次のように関数名の前であればエラーとはなりません。

__attribute__ ((stdcall)) void foo(int i)
{
}

尚、利用しているgccのバージョンは次の通りです。

Reading specs from /usr/lib/gcc/i686-pc-cygwin/3.4.4/specs
Configured with: /gcc/gcc-3.4.4/gcc-3.4.4-1/configure --verbose --prefix=/usr --exec-prefix=/usr --sysconfdir=/etc
--libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info
--enable-languages=c,ada,c++,d,f77,java,objc --enable-nls --without-included-gettext
--enable-version-specific-runtime-libs --without-x --enable-libgcj --disable-java-awt --with-system-zlib
--enable-interpreter --disable-libgcj-debug --enable-threads=posix --enable-java-gc=boehm --disable-win32-registry
--enable-sjlj-exceptions --enable-hash-synchronization --enable-libstdcxx-debug : (reconfigured)
Thread model: posix
gcc version 3.4.4 (cygming special) (gdc 0.12, using dmd 0.125)

このような状況なのですが、__attribute__ や gcc そのものの使い方が間違っているのか、
FUNC_CDECL,FUNC_STDCALLの用途はプロトタイプ宣言のみを意識しているのか、configureを
直すべきなのかと判断に迷っています。どのようにすべきでしょう?
-- 
Takaaki Tateishi <ttate / ttsky.net>