[問題] 執行順序
看板C_and_CPP (C/C++)作者ikari512 ( //StrategyBass)時間16年前 (2009/11/25 07:58)推噓34(34推 0噓 38→)留言72則, 14人參與討論串1/1
請問一下以下程式碼:
printf("gg: %d %d %d\n", gg(),gg(),gg());
3 <- 2 <- 1
是不是會先執行右邊的gg() 再執行中間的gg() 最後是左邊的gg() ?
我一直覺得這是某個原則,但是一直想不起來
感謝!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.168.189.9
推
11/25 08:07, , 1F
11/25 08:07, 1F
→
11/25 08:08, , 2F
11/25 08:08, 2F
→
11/25 09:18, , 3F
11/25 09:18, 3F
推
11/25 09:23, , 4F
11/25 09:23, 4F
→
11/25 09:23, , 5F
11/25 09:23, 5F
推
11/25 09:28, , 6F
11/25 09:28, 6F
→
11/25 09:29, , 7F
11/25 09:29, 7F
→
11/25 09:55, , 8F
11/25 09:55, 8F
→
11/25 09:55, , 9F
11/25 09:55, 9F
M大厲害,這個問題確實是因為我在研究static變數而發現的
code出自於K&R2
若把三個gg()拆成各三個printf就不會發現這個現象...
推
11/25 10:29, , 10F
11/25 10:29, 10F
推
11/25 10:38, , 11F
11/25 10:38, 11F
→
11/25 10:38, , 12F
11/25 10:38, 12F
推
11/25 11:16, , 13F
11/25 11:16, 13F
→
11/25 11:17, , 14F
11/25 11:17, 14F
推
11/25 11:35, , 15F
11/25 11:35, 15F
→
11/25 11:38, , 16F
11/25 11:38, 16F
推
11/25 11:43, , 17F
11/25 11:43, 17F
推
11/25 11:44, , 18F
11/25 11:44, 18F
→
11/25 11:45, , 19F
11/25 11:45, 19F
推
11/25 11:47, , 20F
11/25 11:47, 20F
→
11/25 11:48, , 21F
11/25 11:48, 21F
推
11/25 11:48, , 22F
11/25 11:48, 22F
→
11/25 11:49, , 23F
11/25 11:49, 23F
→
11/25 11:50, , 24F
11/25 11:50, 24F
→
11/25 11:50, , 25F
11/25 11:50, 25F
推
11/25 11:51, , 26F
11/25 11:51, 26F
推
11/25 11:55, , 27F
11/25 11:55, 27F
推
11/25 11:57, , 28F
11/25 11:57, 28F
推
11/25 11:57, , 29F
11/25 11:57, 29F
→
11/25 11:58, , 30F
11/25 11:58, 30F
→
11/25 11:58, , 31F
11/25 11:58, 31F
推
11/25 12:00, , 32F
11/25 12:00, 32F
→
11/25 12:00, , 33F
11/25 12:00, 33F
→
11/25 12:01, , 34F
11/25 12:01, 34F
推
11/25 12:05, , 35F
11/25 12:05, 35F
→
11/25 12:05, , 36F
11/25 12:05, 36F
※ 編輯: ikari512 來自: 218.168.189.9 (11/25 12:49)
所以結論是:這是undefined behaviour,視compiler而定?
有什麼簡單的判斷方法可以避開這種事嗎
因為看起來不只是要小心 同一statement不要call同一函式(裡面可能有static變數)
連
int i=1;
printf("%d %d %d", i++, i++, i++);
這種也會輸出 3 2 1
btw...
順便請教一個不太相關的printf問題
在什麼樣的情況下
printf("111");
printf("222");
會先印出222?
記得這跟buffer大小有關係
但是什麼buffer、什麼情況我想不起來
而這會對debug產生干擾...
thx...
※ 編輯: ikari512 來自: 218.168.189.9 (11/25 13:06)
推
11/25 13:08, , 37F
11/25 13:08, 37F
→
11/25 13:08, , 38F
11/25 13:08, 38F
→
11/25 13:09, , 39F
11/25 13:09, 39F
→
11/25 13:10, , 40F
11/25 13:10, 40F
了解...
推
11/25 13:13, , 41F
11/25 13:13, 41F
推
11/25 13:13, , 42F
11/25 13:13, 42F
推
11/25 13:15, , 43F
11/25 13:15, 43F
→
11/25 13:16, , 44F
11/25 13:16, 44F
→
11/25 13:16, , 45F
11/25 13:16, 45F
推
11/25 13:19, , 46F
11/25 13:19, 46F
推
11/25 13:20, , 47F
11/25 13:20, 47F
→
11/25 13:20, , 48F
11/25 13:20, 48F
→
11/25 13:21, , 49F
11/25 13:21, 49F
某種情況真的會先輸出222...不用特別搞破壞就會這樣Orz
※ 編輯: ikari512 來自: 218.168.189.9 (11/25 13:27)
推
11/25 13:29, , 50F
11/25 13:29, 50F
→
11/25 13:30, , 51F
11/25 13:30, 51F
推
11/25 14:12, , 52F
11/25 14:12, 52F
→
11/25 21:19, , 53F
11/25 21:19, 53F
→
11/25 21:37, , 54F
11/25 21:37, 54F
yes -_-
※ 編輯: ikari512 來自: 218.168.189.9 (11/25 23:34)
推
11/25 23:43, , 55F
11/25 23:43, 55F
推
11/26 00:01, , 56F
11/26 00:01, 56F
→
11/26 00:04, , 57F
11/26 00:04, 57F
→
11/26 00:05, , 58F
11/26 00:05, 58F
推
11/26 01:13, , 59F
11/26 01:13, 59F
→
11/26 01:14, , 60F
11/26 01:14, 60F
我想我舉的例子有可能錯了
剛試了連續printf兩行不同的東西十萬次,然後導到檔案
還沒發現有錯亂
我想問的應該是以下三篇文章提到的
http://tinyurl.com/yd2axek
http://tinyurl.com/ydysex3
http://tinyurl.com/yd6tccj
※ 編輯: ikari512 來自: 218.168.189.9 (11/26 02:06)
推
11/26 03:28, , 61F
11/26 03:28, 61F
→
11/26 03:28, , 62F
11/26 03:28, 62F
推
11/26 09:18, , 63F
11/26 09:18, 63F
推
11/26 09:55, , 64F
11/26 09:55, 64F
→
11/26 09:56, , 65F
11/26 09:56, 65F
→
11/26 09:56, , 66F
11/26 09:56, 66F
→
11/26 12:16, , 67F
11/26 12:16, 67F
推
11/26 12:21, , 68F
11/26 12:21, 68F
→
11/26 12:21, , 69F
11/26 12:21, 69F
推
11/27 14:39, , 70F
11/27 14:39, 70F
推
11/27 23:41, , 71F
11/27 23:41, 71F
→
11/27 23:41, , 72F
11/27 23:41, 72F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章