ホームページ > バックエンド開発 > C++ > Unicode 処理のための C の `_tmain()` と `main()` の違いは何ですか?

Unicode 処理のための C の `_tmain()` と `main()` の違いは何ですか?

Linda Hamilton
リリース: 2024-12-17 06:16:25
オリジナル
942 人が閲覧しました

What's the Difference Between `_tmain()` and `main()` in C   for Unicode Handling?

C の _tmain() と main() の違いは何ですか?

C では、 main() 関数はプログラムのエントリ ポイントとして機能し、 2 つの署名のうち:

int main();
int main(int argc, char* argv[]);
ログイン後にコピー

代わりに、Microsoft は Unicode に対応する拡張機能を導入しました。 support:

int wmain(int argc, wchar_t* argv[]);
int _tmain(int argc, char *argv[]);
ログイン後にコピー

_tmain() と main()

_tmain() と main() の主な違いは、Unicode での使用法にあります。 Unicode が有効な場合、_tmain() は wmain() としてコンパイルされ、wchar_t 文字列を処理できるようになります。それ以外の場合は、デフォルトで main() になります。

文字の解釈を理解する

この例では、char* 引数を指定して _tmain() を使用すると、文字が異なる方法で解釈されるため、予期しない動作が発生します。 Unicode が有効な場合に Windows で使用される UTF-16 は、ASCII 値の後に null バイトが続くバイトのペアとして ASCII 文字を表します。

x86 CPU のリトルエンディアンの性質により、これらはバイトが交換され、ASCII 値の後にゼロ (ヌル バイト) が続きます。通常、文字列は null バイトで終了するため、プログラムは各引数を単一文字の文字列として解釈します。

解決

これを解決するには、次の 3 つのオプションがあります。

  1. Unicode を明示的に使用する: wmain() を呼び出し、wchar_t を使用します。文字列。
  2. Unicode を明示的に無効にする: main() を呼び出し、文字列に char を使用します。
  3. 両方を許可: _tmain() を呼び出し、TCHAR を使用します文字列型のマクロとして。

これらの拡張子とこの概念は Microsoft に固有のものであり、標準 C の一部ではありません。

以上がUnicode 処理のための C の `_tmain()` と `main()` の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート