2

Visual CI には次のものがあります。

#define INVALID_HANDLE_VALUE ((HANDLE)(LONG_PTR)-1)
typedef int HFILE;
HFILE stat_fh = INVALID_HANDLE_VALUE;

そして、私は警告を持っています:

"..warning C4047: '=' : 'HFILE' differs in levels of indirection from 'HANDLE'"

INVALID_HANDLE_VALUEHFILE型にキャストして警告を消せばよろしいでしょうか? コンパイラはすでにまったく同じことを自動的に行っていると思います。

4

2 に答える 2

1

はい、両方の種類の型変換 (「キャスト」) が適用可能 (明示的および暗黙的) である場合、明示的変換のセマンティクスは暗黙的変換のセマンティクスとまったく同じです。

ただし、あなたの場合、暗黙的な変換が適用可能であることは明らかではないことに注意してください。WinodwsAPIHANDLEでは、通常、ポインター型として定義されます。intあなたはそれを型に変換しようとしています。標準 C では、ポインター型から への暗黙的な変換は許可されていませんint。これは、次の宣言を意味します。

HFILE stat_fh = INVALID_HANDLE_VALUE;

制約違反が含まれています。つまり、コンパイルできないはずです。したがって、あなたの質問は実際には意味がありません ( aHANDLEを anに変換することintが本当にやりたいことだと仮定します)。この場合、明示的なキャストが唯一のオプションです。

コンパイラがこの変換を暗黙的に (単なる警告で) 実行できる場合、それはコンパイラの癖であり、標準の C 言語とはまったく関係ありません。

于 2013-10-28T16:21:46.817 に答える