IMNSHO さん、これは Microsoft の言い方です「Windows マシンに Unix ソフトウェアを置かないでください」。この問題には、いくつかの苛立たしい側面があります。
strcmpi()
は POSIX 関数ではありません - 関連する関数は で定義され<strings.h>
、呼び出されますstrcasecmp()
。
- POSIX 関数のサポートを明示的に要求した場合でも、Microsoft は、POSIX 名を使用することはできず、先頭に下線を付ける必要があると考えています。
- 私の知る限り、この問題に関する MSVC コンパイラの見解をオーバーライドする方法はありません。
とは言うものの、GCC ツール チェーンはいくつかの機能について少しぎこちないものになっていますmktemp()
。ただし、(正当化された) 警告にもかかわらず、コンパイルとリンクは正常に行われます。
MSVCのボンネットにもミツバチがいることに注意してくださいsnprintf()
。それらの関数が (コンパイラの残りの部分と共に) C99 標準に準拠している場合、オーバーフローのリスクはありません。Microsoft の主張に反して、標準では null 終了が必要です。
この問題に対する本当に良い解決策はありません。解決策があるかどうかはわかりません。1 つの可能性は、ヘッダー (またはヘッダーのセット) を作成して、実際のすべての POSIX 名を Microsoft のそれらの誤解にマップすることです。もう 1 つは、それぞれが Microsoft バージョンの名前を呼び出す正しい POSIX 名を持つ単純な関数のライブラリを作成することです (宣言行、左中括弧、右中括弧、および右中括弧の 4 行の関数の膨大なコレクションが得られます)。 POSIX 関数名の Microsoft バリアントを呼び出す return ステートメント。
ユーザーの名前空間を汚染する Microsoft API 呼び出しが廃止されたり、名前が変更されたりしていないのは興味深いことです。