c未定義行為是什麼意思,C語言中未定義行為的i i i i

2022-05-14 05:30:14 字數 2214 閱讀 5456

1樓:匿名使用者

就是說,你用到了某一個變數,但是沒有定義,這樣的行為一般都是錯誤的,編譯器即使通過,也很有可能發生錯誤

例如:cout<

i就是沒有定義的

或者說「=」,預設是基本資料型別的賦值,但是用在其他資料型別的話,首先要過載(即先定義),否則即使能賦值,結果很有可能也是錯的

例如:定義一個book型別的資料,就不能用如下**book a;

book b;

a=b;

2樓:唐龍

使用未定義的變數只是所有未定義行為中最簡單的一種,是編譯器特別容易發現的一個錯誤。引用樓主說的一句話:

未定義行為源於編譯器不能檢測到的程式錯誤或太麻煩以致無法檢測到的錯誤。

如果未定義行為真的只是使用了未定義的變數的值,怎麼可能會有不能檢測到的情況。

制定c++語言標準的那些人對於一些情況沒有定義應該按照什麼樣的順序去進行計算,那麼實現編譯器的那夥人在處理這種問題上就會存在分歧,如何處理都不算錯,那麼對於使用編譯器的人來說無法預估一個語句的執行順序,自然就有可能會存在不同的執行結果。

int i = 0; i = i++;

對於上面兩句**,執行後i的值是多少,先賦值後自增結果為1,先自增後賦值的情況下,因為賦值的是自增前的值,所以結果為0,我在gcc和vs2012中測試的結果確實是不同的。

假設你期望上面這段語句的執行結果為1,你在你自己的環境裡測試結果也確實是1,那麼你認為這段語句是正確的,並且繼續使用了這段**,以後換了一個環境就可能會出錯。這就叫做「依賴了未定義的行為,即使程式能執行也是巧合」。實際上我們應該杜絕依賴巧合程式設計。

int a = g() * h() + i() * j();

這是第二個例子,因為我並沒有說明這幾個函式內部是否使用或改變了全域性變數,如果確實使用了那這就又是一個典型的未定義行為。

因為在制定c++語言標準的時候,同樣沒有定義這種語句的執行順序,你不知道這四個函式的呼叫順序是怎樣的,一般來講問題不大,但確實有極低的概率會造成未定義行為。

int arr[10], i;

for (i = 0; i<=10; ++i)

arr[i] = 0;

永遠不要讀寫陣列以外的空間,就比如上面這段**,由於把《寫成了<=,i是有可能等於10的,那麼就相當於給陣列外的空間賦值了。

再看上面的定義,i正好在arr[10]的後面,如果i的地址正好和arr[10]緊挨著呢,那麼上面的這段**就成了死迴圈。

c++標準未定義某些行為的執行細節,是為了讓不同的編譯器廠商放開手腳,盡情優化,所以造成了不同編譯器的處理細節不同。

但是對於我們來講則應該杜絕使用未定義行為,不要依賴巧合程式設計。

在c語言中什麼叫做未定義行為!

3樓:萢萢

在c語言中,出現未定義,簡單來說有以下幾種原因:

1、變數型別沒有指定。

2、指定型別的方式與c++混淆了,特別是在.c檔案中容易出現這種錯誤。

3、變數指定了型別,但是與使用的變數名不符合,使用的變數名會提示為未定義。

4樓:

在c語言中你必須先告訴計算機你所用的變數或者函式的型別 比如說整型 浮點型 字元型 指標型等等 也就是你沒用一個變數 你都必須main()先定義它

c++用空指標呼叫成員函式是未定義行為嗎?

c語言中未定義行為的i=i+++i+++i++

5樓:

未定義的意思就代表,根據編譯器和直譯器不同,你的這行**輸出可能是不一樣的。標準c/c++語言不推薦寫這樣的語句,自己玩玩就好,如果是做正規的專案就不要用這種危險的**了。

6樓:匿名使用者

我也學過c,哈哈,沒寫到過這樣的**

這要看編譯器怎麼解釋了

c++的問題:我用vs2019為什麼i的值沒有被銷燬,k指向地址的內容還是9而不是亂碼

7樓:gta小雞

返回指向區域性變數的指標屬於未定義行為。所謂「未定義行為」,就是c語言標準沒有規定編譯器應該如何處理的行為,因此發生什麼都是有可能的。編譯器可以選擇在函式結束後清除堆疊資料,也可以選擇不做任何事,等待後續資料覆蓋原先資料。

因此,**中*k的值是不可預知的,可能是9,也可能不是9。

C語言 未定義的符號 mian和 scanf在模組 COS與1 C

1 不能直接main 可以用void main 或int main 2 scanf 裡面3 while 1 裡面應該是一個變數限定的條件如 while a 1 4 h已超int的範圍應小於等於327675 printf 請輸入一個不超過五位數 應用中文分號 6 if a h printf n輸入錯誤...

c語言中c什麼意思,c語言中!是什麼意思?

c表示取c的邏輯非,例如if c 表示如果c 0,則語句成立。不曉得你要問什麼 如果想要更確切的解釋,請貼出相關 一種計算機程式語言,是現在運用最廣泛的語言,用於編寫程式 邏輯運算子,取反的意思 真 假 假 真 你確定歎號是中文狀態的嗎?c語言中!是什麼意思?include stdio.h main...

c語言中cabcab是什麼意思,C語言中cabca,b是什麼意思

這是一個函式呼叫的語句,c等於abc函式的返回值。一般這麼寫abc是一個函式,也就是存在 fun type abc para type a,para type b c等於上面這段 中最後一行value的值 max 是個函式,表示取其中最大的值。比如a 3,b 4,則max a,b 4 a 4,b 3...