作者ooww (選ばれし子どもたち)
看板C_and_CPP
標題[問題] 印出問題
時間Mon Feb 8 16:11:01 2021
開發平台(Platform): (Ex: Win10, Linux, ...)
WIN10
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
C COMOILER EXPLORE
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
問題(Question):
為什麼答案是 -3
餵入的資料(Input):
預期的正確結果(Expected Output):
我覺得應該 36
錯誤結果(Wrong Output):
程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔)
補充說明(Supplement):
https://imgur.com/a/PzhmGN5
抱歉 修正一下
-36 改成 36
誠心發問 請教各位神人碼農大大
問題一: 為何a-b 是 5 + 3 - 5 - 3
而不是 5 + 3 -(5 + 3) ?
問題二: 為何計算方式是 5 + 3 - 5 - 3 * 3 - 5 + 3 + 5
而不是(5 + 3 - 5 - 3)*(3 - 5 + 3 + 5) ?
--
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 218.166.75.241 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1612771864.A.3D6.html
※ 編輯: ooww (218.166.75.241 臺灣), 02/08/2021 16:22:23
https://imgur.com/a/u2pRQ0D
改成這樣就能得到我預期的答案
但還是很納悶原本的怎麼不行
※ 編輯: ooww (218.166.75.241 臺灣), 02/08/2021 16:26:27
1F:推 NciscalA: 因為黑板那個範例的 macro 定義裡面沒有括號,所以取代 02/08 17:10
2F:→ NciscalA: 後也不會有括號 02/08 17:10
3F:→ MOONRAKER: macro不是function call 參數不會先計算再傳進去 02/08 17:11
4F:→ MOONRAKER: macro就是這樣 02/08 17:13
5F:→ peterbrucele: macro功用只是單純的文字展開 你想的太複雜了 02/08 18:09
拿嚕吼抖 感謝大大
6F:→ Lipraxde: 編譯時下 -E 可以看 preprocessed 做完後的結果 02/08 18:10
7F:→ Lipraxde: -or,這自動選字 Orz 02/08 18:11
痾...看不太懂怎麼弄
方便大大可以截圖標示一下嗎?
8F:→ loveme00835: 你知道巨集(macro)是什麼東西嗎? 02/08 20:12
#include< > 跟 #define 就是巨集吧?
※ 編輯: ooww (122.121.119.23 臺灣), 02/08/2021 21:09:53
9F:→ loveme00835: # 開頭的是前處理器 (preprocessor) 指令, #include 02/08 21:39
10F:→ loveme00835: 是 include directive, #define 則是定義巨集 02/08 21:39
12F:→ loveme00835: "前"處理是在編譯程式碼"以前"做些文字替換等工作; 02/08 21:45
13F:→ loveme00835: 相較執行時期的計算, 能達成的功能有限 02/08 21:45
14F:→ loveme00835: 不會下 command line option.. 你都是開瀏覽器寫程式 02/08 22:25
15F:→ loveme00835: 嗎? = = 02/08 22:25
痾...對
只是測試講義上例題而已
16F:推 Schottky: 原 PO 的前一篇是用瀏覽器寫程式沒錯 02/09 00:02
17F:→ Schottky: 如果有 PC 的話建議可以裝個免費的 Code::Blocks 02/09 00:03
感謝建議
※ 編輯: ooww (1.173.78.26 臺灣), 02/09/2021 01:27:19
18F:推 kaneson: 巨集只是文字替換,不會自動生括號 02/09 09:56