作者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/cn.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