VC裡一些容易混淆的地方

2021-04-08 18:45:34 字數 3854 閱讀 3298

1.false/true與false/true的區別:

false/true是標準c++語言裡新增的關鍵字,而false/true是通過#define,這要用途是解決程式在c與c++中環境的差異,以下是false/true在windef.h的定義:

#ifndef false

#define false 0

#endif

#ifndef true

#define true 1

#endif

也就是說false/true是int型別,而false/true是bool型別;所以兩者不一樣的,只不過我們在使用中沒有這種感覺,因為c++會幫你做隱式轉換。

2.bool的大小與bool的區別:

bool在c++裡是占用1位元組,而bool是int型別,int型別的大小是視具體環境而定的;所以來說:false/true只占用1個位元組,而true/false視具體環境而言,以下是bool在windef.h中的定義:typedef int bool;

3.null與0的區別:

還是讓我們看一下windef.h中null的定義:

#ifndef null

#ifdef __cplusplus//這個是指示是用c++來編譯程式

#define null 0

#else

#define null ((void *)0)

#endif

#endif

所以說:它們沒有區別,只不過在c裡面會做乙個強制型別轉換。

4.hinstance與hmodule的區別:

在windef.h中的定義:

typedef hinstance hmodule; /* hmodules can be used in place of hinstances */

5.callback,winapi的實質:

在windef.h中的定義:

#undef far

#undef near

#undef pascal

#define far

#define near

#if (!defined(_mac)) && ((_msc_ver >= 800) || defined(_stdcall_supported))

#define pascal __stdcall

#else

#define pascal

#endif

#if defined(doswin32) || defined(_mac)

#define cdecl _cdecl

#ifndef cdecl

#define cdecl _cdecl

#endif

#else

#define cdecl

#ifndef cdecl

#define cdecl

#endif

#endif

#ifdef _mac

#define callback pascal

#define winapi cdecl

#define winapiv cdecl

#define apientry winapi

#define apiprivate cdecl

#ifdef _68k_

#define pascal __pascal

#else

#define pascal

#endif

#elif (_msc_ver >= 800) || defined(_stdcall_supported)

#define callback __stdcall

#define winapi __stdcall

#define winapiv __cdecl

#define apientry winapi

#define apiprivate __stdcall

#define pascal __stdcall

#else

#define callback

#define winapi

#define winapiv

#define apientry winapi

#define apiprivate

#define pascal pascal

#endif

6.一些常見型別的定義:

在windef.h中的定義:

typedef uint wparam;

typedef long lparam;

typedef long lresult;

typedef int int;

typedef unsigned int uint;

typedef unsigned long dword;

typedef int bool;

typedef unsigned char byte;

typedef unsigned short word;

typedef float float;

typedef unsigned long ulong;

typedef unsigned short ushort;

typedef unsigned char uchar;

typedef char *psz;

7.常見window資源型別的實質:

在windef.h中的定義:

declare_handle(hpen);

declare_handle(hbitmap);

declare_handle(hbrush);

declare_handle(hdc);

declare_handle(hfont);

declare_handle(hicon);

declare_handle(hmenu);

declare_handle(hmetafile);

declare_handle(hinstance);

declare_handle(hpalette);

typedef word atom;

typedef handle hglobal;

typedef handle hlocal;

typedef handle globalhandle;

typedef handle localhandle;

typedef hicon hcursor; /* hicons & hcursors are polymorphic */

typedef dword colorref;

在windowsx.h中:

#define declare_handle32 declare_handle

penwin.h:

#ifndef declare_handle32

#define declare_handle32(name)/

struct name##__ ;/

typedef const struct name##__ far* name

#endif //!declare_handle32 

macro

description

__cplusplus

defined for c++ programs only.

_mfc_ver

defines the mfc version. defined as 0x0421 for microsoft foundation class library 4.21. always defined.

_msc_ver

defines the compiler version. defined as 1200 for microsoft visual c++ 6.0. always defined.

_win32

VC裡一些容易混淆的地方

1.false true與false true的區別 false true是標準c 語言裡新增的要害字,而false true是通過 define,這要用途是解決程式在c與c 中環境的差異,以下是false true在windef.h的定義 ifndef false define false 0 e...

VC裡一些容易混淆的地方

1.false true與false true的區別 false true是標準c 語言裡新增的關鍵字,而false true是通過 define,這要用途是解決程式在c與c 中環境的差異,以下是false true在windef.h的定義 ifndef false define false 0 e...

一些容易錯的地方

錯誤1.錯因 compileerror 錯誤資訊如下 source main.cpp in function int main source main.cpp 12 error k was not declared in this scope 正確 如下 錯誤2.答案錯誤 輸出結果不對,看看是不是忘...