C 教程之auto關鍵字的使用

2022-08-31 09:18:09 字數 2804 閱讀 2836

一、auto關鍵字的前世

從c語言開始,auto關鍵字就被當作是乙個變數的儲存型別修飾符,表示自動變數(區域性變數)。它不能被單獨使用,否則編譯器會給出警告。

#include int main()

編譯執行結果:

$ gcc main.c

main.c:7:7: warning: type specifier missing, defaults to 'int' [-wimplicit-int]

auto c = 345;

~~~~ ^

1 warning generated.

$ ./a.out

a = 123, b = 234, c = 345

二、auto關鍵字的今生

在c++ 11標準中,新增了新的型別推導特性,考慮到auto關鍵字很少使用,就給它重新賦予了功能——申明型別由編譯器推導的變數。在c++ 11中,使用auto定義的變數不能使用其它型別修飾符修飾,該變數的型別由編譯器根據初始化資料自動確定。auto型別的變數必須進行初始化。

#include int main()

1 .使用c++ 98標準進行編譯,會出現警告:

$ clang++ main.cpp -std=c++98

main.cpp:6:2: warning: 'auto' type specifier is a c++11 extension

[-wc++11-extensions]

auto b = a;

^1 warning generated.

$ ./a.out

i #輸出結果為整數型別

改用c++ 11進行編譯:

$ clang++ main.cpp -std=c++11

$ ./a.out

i

2 .但是如果還是將auto作為儲存型別修飾符使用,則在c++ 11標準下會出現警告:

#include int main()

使用c++ 98編譯:

$ clang++ main.cpp -std=c++98

$ ./a.out

i

改用c++ 11編譯,出現警告,不再允許作為儲存型別修飾符使用:

$ clang++ main.cpp -std=c++11

main.cpp:6:2: warning: 'auto' storage class specifier is not permitted in c++11,

and will not be supported in future releases [-wauto-storage-class]

auto int b;

^~~~~

1 warning generated.

3 .必須要對auto型別的變數進行初始化,c++ 98中不能單獨使用auto定義變數。

$ clang++ main.cpp -std=c++98

main.cpp:6:2: warning: 'auto' type specifier is a c++11 extension

[-wc++11-extensions]

auto b;

^main.cpp:6:7: error: declaration of variable 'b' with type 'auto' requires an

initializer

auto b;

^1 warning and 1 error generated.

$ clang++ main.cpp

main.cpp:6:2: warning: 'auto' type specifier is a c++11 extension

[-wc++11-extensions]

auto b;

^main.cpp:6:7: error: declaration of variable 'b' with type 'auto' requires an

initializer

auto b;

^1 warning and 1 error generated.

三、擴充套件

在c++中還能使用decltype來獲取變數或者表示式的型別並用來定義新的變數。

#include int main()

編譯執行結果:

$ clang++ main.cpp -std=c++98

$ ./a.out

i$ clang++ main.cpp -std=c++11

$ ./a.out

i

需要注意的是該標準只是改變了c++中auto的用法,但是並沒有影響auto在c語言中的使用!

C 教程之auto關鍵字的使用

一 auto關鍵字的前世 從c語言開始,auto關鍵字就被當作是乙個變數的儲存型別修飾符,表示自動變數 區域性變數 它不能被單獨使用,否則編譯器會給出警告。include intmain 編譯執行結果 gcc main.c main.c 7 7 warning type specifier miss...

auto關鍵字使用

auto型別變數 根據初始值推斷真實的資料型別。有些時候並不能很確定乙個變數應該具備的資料型別,例如 將乙個複雜表示式的值賦給某個變數,此時並不能很明顯的確定這個值所具備的資料型別。此時auto關鍵字可以派上用場。auto儲存型別說明符宣告了乙個自動變數,auto物件和變數被儲存在棧中,它的生命週期...

C 的auto關鍵字

c中的auto關鍵字沒啥大用,因為它是用於顯式地說明變數是自動儲存型別的,但是auto又只能用於預設就是自動儲存的區域性變數,即函式中定義的變數和函式的引數,所以 emmmm,很尷尬的工作,大家根本不鳥他。比如 intft int x c 看出了auto的尷尬,於是需要有新工作的時候就沒有引入新的關...