空格符不允许出现在预处理指令中?

gniynus 2011-03-01 08:51:55
在读c++ primer时,看到这样一句话:
“在写c++程序时,大部分出现空格符的地方可用换行符代替。这条规则的一个例外是字符串字面值中的空格符不能用换行符代替。另一个例外是空格符不允许出现在预处理指示中。”

空格符怎么会不允许出现在预处理指令中呢?应该是换行符吧?

笨人菜鸟一只,勿笑啊,鼓励为主,鼓励为主。嘻嘻~~
...全文
482 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
funnyfor 2012-07-09
  • 打赏
  • 举报
回复
我也遇到同样的问题。
原文是“When writing a C++ program, in most places that a space appears we could instead use a newline. One exception to this rule is that spaces inside a string literal cannot be replaced by a newline. Another exception is that spaces are not allowed inside preprocessor directives.

在写 C++ 程序时,大部分出现空格符的地方可用换行符代替。这条规则的一个例外是字符串字面值中的空格符不能用换行符代替。另一个例外是空格符不允许出现在预处理指示中。

我觉得后面那句话的意思是在预处理中不能用换行替换空格的意思。
在预处理换行也确实会遇到
error C2006: “#include”: 应输入文件名,却找到“newline”
的错误。
估计是难以理解外国人的省略语句的思维翻译错误吧。。。。
gniynus 2011-03-01
  • 打赏
  • 举报
回复
好吧,就这样吧,虽然还是有点模糊。先放放~~
superarhow 2011-03-01
  • 打赏
  • 举报
回复
就是说你要定义一个叫SCREEN WIDTH的宏是不行滴:
#define SCREEN WIDTH ---> bad
#define SCREEN_WIDTH
gniynus 2011-03-01
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 pengzhixi 的回复:]
White space can appear within a preprocessing
token only as part of a header name or between the quotation characters in a character literal or string
literal.
[/Quote]

“only as part of ”,那么说,preprocessing
token里面还是可以出现空格的呀。
pengzhixi 2011-03-01
  • 打赏
  • 举报
回复
White space can appear within a preprocessing
token only as part of a header name or between the quotation characters in a character literal or string
literal.
gniynus 2011-03-01
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ri_aje 的回复:]
Preprocessing directives,中文“预处理指示”。宏定义是其中的一种,其他的也不能包含空格,说预处理指示更全面,更正确。
[/Quote]

不包含空格是说预处理指示的哪里不能包含呢?就像刚才我说的,
#include <iostream>
这里include和后面的库文件之间有空格,编译运行没问题的啊,但是换行就不行。
是不是应该是“换行符不允许出现在预处理指示中”呀?
ri_aje 2011-03-01
  • 打赏
  • 举报
回复
Preprocessing directives,中文“预处理指示”。宏定义是其中的一种,其他的也不能包含空格,说预处理指示更全面,更正确。
gniynus 2011-03-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 thefirstz 的回复:]
额,应该是宏定义,文件包含没什么可说的
[/Quote]

那为什么不说“空格符不允许出现在宏定义指令中”就好了啊
昵称很不好取 2011-03-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 gniynus 的回复:]
引用 1 楼 thefirstz 的回复:
意思是预处理中会以第一个空格之后的内容替换第一个空格之前的内容吧?


你说的是宏定义吗?预处理包含很多吧?比如文件包含也是预处理。
#include <iostream>
这里include和后面的库文件之间有空格,编译运行没问题的啊
[/Quote]
额,应该是宏定义,文件包含没什么可说的
gniynus 2011-03-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 thefirstz 的回复:]
意思是预处理中会以第一个空格之后的内容替换第一个空格之前的内容吧?
[/Quote]

你说的是宏定义吗?预处理包含很多吧?比如文件包含也是预处理。
#include <iostream>
这里include和后面的库文件之间有空格,编译运行没问题的啊
昵称很不好取 2011-03-01
  • 打赏
  • 举报
回复
意思是预处理中会以第一个空格之后的内容替换第一个空格之前的内容吧?

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧