加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

#define应该在宏周围添加空格吗?

发布时间:2020-12-16 10:50:01 所属栏目:百科 来源:网络整理
导读:我正在查看 http://www0.us.ioccc.org/1988/westley.c中的程序,在 another SO answer中提到 – 它应该打印pi的值,大约3.142,但是当我编译它并运行它时我得到0.250.看起来当GCC预处理器(经过测试的4.1.2和3.4.6)在代码上运行时,它会转换 #define _ -F00||--F-
我正在查看 http://www0.us.ioccc.org/1988/westley.c中的程序,在 another SO answer中提到 – 它应该打印pi的值,大约3.142,但是当我编译它并运行它时我得到0.250.看起来当GCC预处理器(经过测试的4.1.2和3.4.6)在代码上运行时,它会转换

#define _ -F<00||--F-OO--;
_-_-_

-F<00||--F-OO--;- -F<00||--F-OO--;- -F<00||--F-OO--;

但我认为,要使该计划有效,它应该是

-F<00||--F-OO--;--F<00||--F-OO--;--F<00||--F-OO--;

即GCC在“宏观”扩展之前插入一个额外的空间.这是#define的工作方式吗? (自1988年以来有变化吗?)

编辑:此外,任何有关如何防止这些空间出现的信息将不胜感激.

解决方法

预处理器对令牌进行操作,而不是严格的文本.所以从技术上来说,它并没有“放置空间”,但除非你明确告诉它将两个令牌与##运算符一起粘贴,否则它不会这样做.在这种情况下,两个跨越宏的行被计为两个不同的标记 – 都意味着一元减去,而不是减少.

另见:http://en.wikipedia.org/wiki/C_preprocessor#Token_concatenation

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读