7

Java と C# のバックグラウンドを持っているため、C++ コーディングは初めてです。最も基本的なものから始まる #define 用語の急増に当惑しています。

#define _tmain wmain

何年も前に私が最初に C の断片を学んだとき、主な機能は次のとおりでした。

int main(int argc, char *argv[])

私が作成した Visual C++ プロジェクトでは、main 関数を作成しました。

int _tmain(int argc, _TCHAR* argv[])

wmainなぜ からへの名前変換が必要なのか疑問に思ってい_tmainます。main元の C関数プロトタイプを使用しないのはなぜですか?

一般に、最初はかなり明確に見えるものを、より神秘的であまり明確に見えないものに名前変更する #define がたくさんあるようです (私は??を意味wmainします)。_tmain

非常に明白な質問かもしれないことを許容してくれてありがとう。

4

2 に答える 2

13

これは Visual C++ 固有の機能であり、C++ の一部ではありません。

ほとんどの Windows API 関数には 2 つのバージョンがあります。Wワイド文字列 (string) で使用する でwchar_t終わるバージョンAと、ナロー文字列 ( charstrings) で使用する で終わるバージョンです。実際の Windows API "関数" には接尾辞がなく、設定に応じて適切なバージョンに展開されるマクロとして定義されています。

名前T(_TCHARおよび など_tmain) は同じ目的のためのものです。これらは、コンパイル設定に応じて適切な名前に展開されるマクロでwchar_tありwmain、ワイド文字のサポートまたはナロー文字のサポートのため charに使用されます。main

これは、文字タイプに依存しない名前 (T名前) を使用してコードを記述した場合、コードをコンパイルして、コードを変更せずにナロー文字 (ASCII) またはワイド文字 (Unicode) を使用できるという考え方です。トレードオフは、コードの移植性が低下することです。

于 2011-02-08T18:51:27.737 に答える
5

Microsoft は、C++ に Unicode サポートを追加する最善の方法は、プロジェクト プロパティ > 構成プロパティ > 一般 > 文字セット の値に応じて#definedTCHARである型を追加することであると判断したためです。は、その設定に応じて(which takes) または ( which takess) のいずれかに #defined です。charwchar_t_tmainmaincharwmainwchar_t

于 2011-02-08T18:52:42.683 に答える