c ++函数调用前的空格

时间:2013-03-14 13:20:13

标签: c++ syntax whitespace

c ++中是否允许以下​​代码? a. foo() (注意“foo”之前的空格)

我不会假设,但编译器不会抱怨。

4 个答案:

答案 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();