次のコードはC++で許可されていますか?
a. foo()
(「foo」の前のスペースに注意してください)
私はそうは思わないでしょうが、コンパイラは文句を言いません。
次のコードはC++で許可されていますか?
a. foo()
(「foo」の前のスペースに注意してください)
私はそうは思わないでしょうが、コンパイラは文句を言いません。
私の知る限り、コンパイラはすべての空白(タブ、改行、スペース)を文字列内(つまり「文字列内」)にない限り削除します。
[編集]演算子に空白を入れないでください(つまり、とはi++
異なり、i+ +
とfoo()
は異なりfo o()
ます)。
[編集]別の回答で述べたように、空白(スペース、タブ、改行、コメント)は、void bar()
vsなどの演算子を区切るためにも使用されます。voidbar()
はい、それは有効なC++コードです。
C++標準から -ANSIISOIEC 14882 2003.pdf、第2.6章:
トークンには、識別子、キーワード、リテラル、演算子、その他の区切り文字の5種類があります。以下で説明するように、空白、水平タブと垂直タブ、改行、フォームフィード、およびコメント(総称して「空白」)は、トークンを区切る場合を除いて無視されます。
同じ章では、パンクチャレーターもトークンであると定義しています。
第2.12章演算子と句読点.
は、それが句読点であることを定義します。
許可された。
.
、、、など+
の単なる演算子です。::
->
&&
あなたの場合、スペースは無視されます
一般的に言えば、レクサーがソースファイルからトークンを生成した後に削除されたスペース。
CまたはC++のトークンの前後のどこにでも、スペースをいくつでも、または少なくすることができます。唯一のルールは、トークンは別のトークン(つまり、文字(AZ、az、_)または数字ではないもの)で区切る必要があるということです[関連する場合、トークンには。、+または-なども含まれる場合があります浮動小数点数として)。
それで
a.foo()
a. foo();
a . foo ( ) ;
a
.
foo
(
)
;
すべて同じです。
ただし、特定のトークン、特に「文字と数字」のみで構成されるトークンの間にはスペースが必要です(上記を参照)。
voidfoo()
と同じではありません
void foo();