c ++中是否允许以下代码?
a. foo()
(注意“foo”之前的空格)
我不会假设,但编译器不会抱怨。
答案 0 :(得分:3)
应该没问题,据我所知,编译器会删除所有空格(制表符,换行符,空格),除非它们是字符串(即“在字符串中”)。
[edit]你也不应该在运算符中添加空格(即i++
与i+ +
不同,foo()
与fo o()
不同。
[edit]如另一个答案所述,空格(空格,制表符,换行符,注释)也用于分隔运算符,例如void bar()
与voidbar()
答案 1 :(得分:3)
是的,它是有效的C ++代码:
来自C++ Standard - ANSI ISO IEC 14882 2003.pdf,第2.6章:
有五种令牌:标识符,关键字,文字,运算符和其他分隔符。 消隐,水平和垂直制表符,换行符,换页符和评论(统称为“空格”),如下所述,会被忽略,除非它们用于分隔令牌。
同一章定义标点符号也是标记。
章 2.12运算符和标点符号定义.
是标点符号。
答案 2 :(得分:2)
允许的。
.
只是运营商,例如+
,::
,->
,&&
等。
您的案例中会忽略空格
一般来说,在词法分析器从源文件生成标记后删除空格。
答案 3 :(得分:2)
在C或C ++中的任何标记之前或之后,您可以拥有任意数量的空格。唯一的规则是令牌需要由不同的令牌(即,不是字母(AZ,az,_)或数字[并且相关时,令牌也可以包含。,+或 - ,例如作为浮点数)。
所以
a.foo()
a. foo();
a . foo ( ) ;
a
.
foo
(
)
;
都是一样的。
但是你必须在某些代币之间留一个空格,特别是那些只包含“字母和数字”的代币(见上文):
voidfoo()
与
不同void foo();