c、c++做用域問題&C語言的各類版本:C89,AMD1,C99,C11

忽然想到這個問題,循環變量i的做用範圍。html

標準c語言不能這樣定義ios

for(int i=0;i<5;i++){
	printf("%d\n",i);
}

編譯會失敗。c++

int i;
for(i=0;i<5;i++){
	printf("%d\n",i);
}
printf("%d",i); //輸出5

 

c++中函數

#include<iostream>
#include<stdlib.h> 
int main(int argc, char* argv[])
{
int i;
for(i=0;i<5;i++){
	printf("%d\n",i);
}
printf("%d",i); //i輸出爲5
system("pause"); 
return 0;
}

 

for(int i=0;i<5;i++){
	printf("%d\n",i);
}
printf("%d",i); //i做做用域在for內

C語言的各類版本:C89,AMD1,C99,C11

【背景】spa

以前就知道了有個C90和C99。.net

後來又在:code

【已解決】弄明白哪一個版本的gcc才支持c11htm

期間知道有C11。ci

如今去整理一下,關於C語言的版本方面的更詳細的內容。作用域

 

參考內容:

Language Standards Supported by GCC

An Introduction to GCC – for the GNU compilers gcc and g++

 

C語言版本歷史

C語言主要有三個版本:

ANSI C==C89==C90

ANSI C standard==X3.159-1989

1989年批准經過;

1990年發佈;

後被批准爲ISO標準:ISO/IEC 9899:1990

常叫作:C89

偶爾被叫作:C90

GCC中指定此版本所用參數時,有三種寫法:

  • -ansi
  • -std=c90
  • -std=iso9899:1990

 

此C90後來在1994年,1996年,前後發佈過對應的勘誤表;

 

AMD1==C94==C95

1995年,針對以前1900年發佈的標準,發佈了一個修訂版;

添加了一個有向圖(digraphs)和宏:__STDC_VERSION__

此標準,常被叫作:AMD1

有時候被叫作:C94C95

GCC中指定此版本時所用參數:

  • -std=iso9899:199409

 

C99

1999年又發佈了新標準:ISO/IEC 9899:1999

常被叫作:C99

此C99標準未完成以前的草案,被叫作:C9X

 

GCC中指定此版本時所用參數有兩種寫法:

  • -std=c99
  • -std=iso9899:1999

 

此C99後來在2001年,2004年和2007年,前後發佈過對應的勘誤表;

 

C11

2011年發佈了新標準:ISO/IEC 9899:2011

GCC中指定此版本時所用參數有兩種寫法:

  • -std=c11
  • -std=iso9899:2011

此C11標準未完成以前的草案,被叫作:C1X

 

關於GCC中對於C的擴展

對於GCC來講,對於上述各個版本的C語言,都有必定的擴展(extension)

若是用上面列出來的那些-std參數的話,則會禁止,不使用這些擴展的。

若是想要在GCC中使用C擴展的話,所用的參數都是gnuXX類型的,分別是:

  • C90使用GCC的C擴展:-std=gnu90
  • C99使用GCC的C擴展:-std=gnu99
  • C11使用GCC的C擴展:-std=gnu11

 

當前C language dialect默認所用的參數是:-std=gnu90

可是當之後,GCC對於C99和C11支持程度真正完善後,則可能會換成對應的:-std=gnu99或-std=gnu11

 

C語言庫函數實現類型

ISO的C語言標準,定義了對於C語言的兩種實現:

  • 支持C語言的全部庫函數
  • 支持C語言的基本庫函數( + 各自版本對應的實現)
    • 基本庫函數包括:<float.h>,<limits.h>,<stdarg.h>,<stddef.h>
    • AMD1對應的是:<iso646.h>
    • C99對應的是:<stdbool.h>,<stdint.h>
    • C11對應的是:<stdalign.h>,<stdnoreturn.h>

 

總結C語言的各類版本

 

 

 

C語言的各類版本

主版本

C89

AMD1

C99

C11

別名

C90

ANSI C

X3.159-1989

ISO/IEC 9899:1990

C94

C95

ISO/IEC 9899:1999

ISO/IEC 9899:2011

標準經過時間

1989年

     

標準發佈時間

1990年

1995年

1999年

2011年

GCC使用此版本所用參數

-ansi

-std=c90

-std=iso9899:1990

-std=iso9899:199409

-std=c99

-std=iso9899:1999

-std=c11

-std=iso9899:2011

GCC使用此版本且帶C擴展時所用參數

-std=gnu90

 

-std=gnu99

-std=gnu11

C語言實現時所對應函數庫

<float.h>

<limits.h>

<stdarg.h>

<stddef.h>

<iso646.h>

<stdbool.h>

<stdint.h>

<stdalign.h>

<stdnoreturn.h>

 

如此,就很清晰明瞭了。

相關文章
相關標籤/搜索