標準C語言Microsoft專用C語言關鍵字之間的差別

標準C 語言使用下列關鍵字:

auto

break

case

char

const

continue

default

do

double

else

enum

extern

float

for

goto

if

inline

1, a

int

long

register

restrict

1, a

return

short

signed

sizeof

static

struct

switch

typedef

union

unsigned

void

volatile

while

_Alignas

2, a

_Alignof

2, a

_Atomic

2, b

_Bool

1, a

_Complex

1, b

_Generic

2, a

_Imaginary

1, b

_Noreturn

2, a

_Static_assert

2, a

_Thread_local

2, b

1 ISO C99 中引入的關鍵字。

2 ISO C11 中引入的關鍵字。

a 從 Visual Studio 2019 版本 16。8 開始,如果指定了 /std:c11 或 /std:c17 編譯器選項,將在編譯為 C 的程式碼中支援這些關鍵字。

b 從 Visual Studio 2019 版本 16。8 開始,如果指定了 /std:c11 或 /std:c17 編譯器選項,這些關鍵字將由編譯器在編譯為 C 的程式碼中識別,但不受支援。

不能重新定義關鍵字。 但是,你可以在編譯前透過使用 C 預處理器指令指定文字來替換關鍵字。

Microsoft 專用 C 關鍵字

ANSI 和 ISO C 標準允許為編譯器實現保留帶有兩個前導下劃線的識別符號。 Microsoft 的慣例是在 Microsoft 專用關鍵字名稱前加上雙下劃線。 這些單詞不能用作識別符號名稱。 有關識別符號命名規則的說明,包括雙下劃線的使用,請參閱識別符號。

下列關鍵字和特殊識別符號由 Microsoft C 編譯器識別:

__asm

5

__based

3, 5

__cdecl

5

__declspec

5

__except

5

__fastcall

__finally

5

__inline

5

__int16

5

__int32

5

__int64

5

__int8

5

__leave

5

__restrict

__stdcall

5

__try

5

dllexport

4

dllimport

4

naked

4

static_assert

6

thread

4

3 __based 關鍵字對 32 位和 64 位目標編譯的用途有限。

4 當與 __declspec 一起使用時,這些關鍵字是特殊的識別符號;它們在其他情況下的使用不受限制。

5 為了與以前的版本相容,當啟用 Microsoft 擴充套件時,這些關鍵字既可以使用兩個前導下劃線,也可以使用一個前導下劃線。

6 如果不包括 ,則 Microsoft Visual C 編譯器會將 static_assert 對映到 C11 _Static_assert 關鍵字 。

預設情況下將啟用 Microsoft 擴充套件。 為了幫助建立可移植的程式碼,可以在編譯過程中指定 /Za (禁用語言擴充套件) 選項來禁用 Microsoft 擴充套件。 如果使用此選項,將禁用某些 Microsoft 專用關鍵字。

啟用 Microsoft 擴充套件時,您可在程式中使用上面列出的關鍵字。 為了符合標準,這些關鍵字大多使用前導雙下劃線。 dllexport、dllimport、naked 和 thread 這 4 個關鍵字除外,它們只與 __declspec 一起使用,不需要前導雙下劃線。 為了向後相容,支援其餘的關鍵字的單下劃線版本。