0

ntohl現在、、、およびほとんどのファイルに含まれる標準ヘッダー ファイルでマクロとして定義されているプロジェクトに取り組んでいntohsます。これにより、これらのシンボルが既に定義されているプラ​​ットフォームで問題が発生します。たとえば、winsock2.h は上記と同じ名前の関数を宣言し、これらの宣言がマクロ定義に展開されるため、コンパイル エラーが発生します。Mac OS では、これらのマクロが既に定義されているため、何千ものコンパイラ警告が表示されます。htonlhtons

Windows、Mac OS、Linux をサポートし、可能な限り OS の標準機能またはマクロを使用し、それらがデカール化されていない場合は、独自の定義を使用したいと考えています。これを行う最善の方法は何ですか?

私が試してみました:

#if defined WIN32
  #include <winsock2.h>
#endif

しかし、現在の大きなコードベースと多くの関数名が衝突するため、コンパイル エラーが発生します。

4

1 に答える 1

1

これは謎ではありません。

#ifndef ntohl
#define ntohl(x) ...
#endif

次に、すべての言語とシステムの #include が自分自身の前にあることを確認する必要があります。これはとにかく標準的な方法です。

于 2013-07-17T10:10:02.370 に答える