[請益] C++老問題

看板Soft_Job作者 (@@)時間10年前 (2013/08/03 00:38), 編輯推噓11(11031)
留言42則, 24人參與, 最新討論串1/1
#include <cstdlib> #include <iostream> using namespace std; #define fun(x) x*x*x int main(int argc, char *argv[]) { int a = 2; int b = fun(++a); cout<<a<<" " << b<<endl; system("PAUSE"); return EXIT_SUCCESS; } 小弟不才, 答案出乎我意料, 可以請高手指點嗎?? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.161.193.64

08/03 00:43, , 1F
++a*++a*++a ...這
08/03 00:43, 1F

08/03 00:44, , 2F
有點老梗 就是 ++a*++a*++a 依順位執行
08/03 00:44, 2F

08/03 00:45, , 3F
答案是 5 80
08/03 00:45, 3F

08/03 00:46, , 4F
會不會因編譯器的不同而有不同的答案?
08/03 00:46, 4F

08/03 00:51, , 5F
答案是undefined behavior
08/03 00:51, 5F

08/03 00:52, , 6F
C 怎麼什麼都 undefine ...
08/03 00:52, 6F

08/03 00:54, , 7F
undefined才有最佳化的空間
08/03 00:54, 7F

08/03 00:55, , 8F
而且這麼常出現是因為很多題目自以為刁鑽
08/03 00:55, 8F

08/03 01:07, , 9F
誰沒事這樣寫code給他雨八
08/03 01:07, 9F

08/03 01:09, , 10F
令刀
08/03 01:09, 10F

08/03 01:19, , 11F
寫得 KISS 加 /* 才正辦,炫技的無解。
08/03 01:19, 11F

08/03 01:32, , 12F
effective c++中就建議少用macro
08/03 01:32, 12F

08/03 01:46, , 13F
PO 錯板?
08/03 01:46, 13F

08/03 03:14, , 14F
網路就能查到了吧..
08/03 03:14, 14F

08/03 06:59, , 15F
a+++a
08/03 06:59, 15F

08/03 07:00, , 16F
marco使用的技巧就是一定要包起來..
08/03 07:00, 16F

08/03 10:46, , 17F
本板有開放作業文嗎?
08/03 10:46, 17F

08/03 11:20, , 18F
我用vs2010答案是5 125耶?
08/03 11:20, 18F

08/03 11:20, , 19F
@Dav12345
08/03 11:20, 19F

08/03 11:40, , 20F
很無聊的題目 根本找不到人會這樣寫
08/03 11:40, 20F

08/03 14:22, , 21F
會考這題的公司 表示連出題目都不會 這是給剛看完書的人
08/03 14:22, 21F

08/03 14:22, , 22F
寫的 公司要這樣的人幹嘛?
08/03 14:22, 22F

08/03 14:48, , 23F
undefined 沒錯,Google "Sequence point C"
08/03 14:48, 23F

08/03 14:55, , 24F
是哪一年特考的題目?
08/03 14:55, 24F

08/03 19:08, , 25F
compiler不同有不同答案吧...
08/03 19:08, 25F

08/03 22:26, , 26F
我算錯了>"<
08/03 22:26, 26F

08/04 00:03, , 27F
不同的compiler有不同的答案,這樣c還有可攜性嗎?
08/04 00:03, 27F

08/04 00:21, , 28F
為什麼沒有?undefined behavior 又不是避不掉 XD
08/04 00:21, 28F

08/04 00:35, , 29F
在undefined之前還有implementation-defined
08/04 00:35, 29F

08/04 00:35, , 30F
c的可攜性本來就是要自己或library注意的
08/04 00:35, 30F

08/04 01:39, , 31F
推樓上,所謂可攜性只是指語法相通,但底層會不同
08/04 01:39, 31F

08/04 06:15, , 32F
以c89來說,就連CPU不同連int大小都會不同了。
08/04 06:15, 32F

08/04 19:07, , 33F
C_and_CPP 置底文 13戒之9
08/04 19:07, 33F

08/04 20:51, , 34F
先說解答:Undefined。++運算最高優先,但運算序無要求
08/04 20:51, 34F

08/04 20:54, , 35F
1形態大小NA1有補header,size critical請用exact type
08/04 20:54, 35F

08/06 22:00, , 36F
原PO都扣的不 KISS 了,還在忙啥?大概都沒看過 K&K. 寫
08/06 22:00, 36F

08/06 22:03, , 37F
的 c Bible。其實書名只是 c 語言,也沒看過為何有 c 的
08/06 22:03, 37F

08/06 22:05, , 38F
哲思。看看最大的大佬比爾蓋茨的書 如何撰寫程式 Basic,
08/06 22:05, 38F

08/06 22:07, , 39F
他老大要求寫得 KISS!而且不忘懷 basic 語言,basic 不
08/06 22:07, 39F

08/06 22:09, , 40F
僅僅 basic,蓋茨的堅持令你現在還在扣 VB;不是嗎?
08/06 22:09, 40F

08/06 22:11, , 41F
看到這個程式兩個K大都會從地下跳出來。:什麽都沒錯,錯
08/06 22:11, 41F

08/06 22:15, , 42F
在中央處理器的佇列 暫存 堆疊怎麼承受!不要整他就對了.
08/06 22:15, 42F
文章代碼(AID): #1H--2KsK (Soft_Job)