1

なので、Cを使ってSDLを学んでいます。

少しいじった後、なんとか SDL_Init() を取得してセグメンテーション違反を発生させました。調査の結果、原因は関数 int connect() を作成したことであることが判明しました。関数の名前を my_connect() などの別のものに変更すると、すべて正常に動作します。

connect() という名前の関数が SDL ライブラリのどこかに既に存在し、私の定義が衝突を引き起こしていると考えました。ただし、APIには、connect などの名前の関数についての言及はありません。

SDL を使用する際に避けるべき他の名前はありますか? それらのリストはどこにありますか?

... それとも、これはカプセル化の必要性を示すもう 1 つの良い例ですか?

4

1 に答える 1

4

すべての SDL 名は SDL_ で始まります。ただし、SDL は、connect などの標準 C 関数を呼び出して機能させることができます。アプリケーションがその名前でグローバル関数を作成すると、標準ライブラリの関数が置き換えられるため、SDL はグローバル関数ではなく独自の関数を使用します。実際、別の名前を使用すると問題は解決します。別のオプションは、関数を静的にすることです (ただし、もちろん、グローバルに必要とする必要はありません)。

于 2012-11-23T11:35:30.710 に答える