6

Visual Studio に付属する C++ 標準ライブラリの実装と Windows API (Win32 と MFC の両方) には、多数のマクロが含まれています。

たとえば、「TRUE」と「FALSE」を 1 と 0 として定義しています。また、すべてのコンテキストで bool を int への typedef である「BOOL」に置き換えます。そして、彼らは三方論理さえ使っていません。

テンプレートで簡単に置き換えることができる「最小」および「最大」マクロもあります。

「遠く」や「近く」など、何も定義されていない定義もたくさんあります。

4

2 に答える 2

12

このコードの多くは、C コードとして誕生し、1980 年代にさかのぼります。今日ゼロから作成されていた場合、コードは少し異なるように見えると予想できます。

たとえば、BOOLタイプを選択します。Windows API が最初に考案された当時、C にはブール型はありませんでした。

MINおよびMAXマクロについて言及し、テンプレートを提案します。ご存知のように、C にはテンプレートがなく、それらのマクロはおそらく C++ テンプレートよりも古いものです。

MFC は C++ ライブラリですが、C API である Win32 の上に立っています。そのため、MFC の実装では、その実装でその C API を使用する必要があることは明らかです。

于 2013-03-20T18:36:02.277 に答える
8

Ye Olden C 時代 (MS-DOS) ではfarnearポインタ キーワードでした。これらのライブラリの多くは、最初から C で書かれていました。したがって、標準ライブラリ全体をゼロから再発明する代わりに、すでに機能しているものを使用し、すでに十分に機能していました。

また、Windows は本質的に C++ API ではなく C API であるため、多くのもの (マクロ、奇妙な定義など) がコードに存在することが予想されます。

于 2013-03-20T18:38:15.967 に答える