粗略地说,在C ++中有运算符(+
,-
,*
,[]
,new
,...
),标识符(类的名称,变量,函数,...),常量文字(10
,2.5
,"100"
,...),一些关键字(int
,{{ 1}},class
,typename
,...),括号(mutable
,{
,}
,<
),预处理器( >
,#
...)。但是分号是什么?
答案 0 :(得分:14)
分号是标点符号,见2.13§1
C ++程序的词汇表示包括许多用于的预处理标记 预处理器的语法或转换为运算符和标点符号
的标记
答案 1 :(得分:12)
它是语法的一部分,其中包含几个语句的元素。在EBNF:
<do-statement>
::= 'do' <statement> 'while' '(' <expression> ')' ';'
<goto-statement>
::= 'goto' <label> ';'
<for-statement>
::= 'for' '(' <for-initialization> ';' <for-control> ';' <for-iteration> ')' <statement>
<expression-statement>
::= <expression> ';'
<return-statement>
::= 'return' <expression> ';'
此列表不完整。请看我的评论。
答案 2 :(得分:8)
分号是一个终端,一个终止某事的标记。它终止的确切取决于上下文。
答案 3 :(得分:7)
Semicolon是一个声明终止符。
答案 4 :(得分:5)
分号表示顺序组合。它还用于描述声明。
答案 5 :(得分:1)
分号在C ++标准中没有给出特定名称。它只是在某些语法产生中使用的一个字符(它恰好经常出现在它们的末尾,所以它'终止'那些语法结构)。例如,分号字符位于C ++语法的以下部分的末尾(不一定是完整列表):
expression-statement
iteration-statement
jump-statement
s simple-declaration
请注意,在expression-statement
中,表达式是可选的。这就是为什么“运行”分号;;;;
在许多(但不是全部)单个地方有效的原因。
答案 6 :(得分:0)
分号让编译器知道它已到达命令AFAIK的末尾。
答案 7 :(得分:0)
分号(;)是C ++中的命令。它告诉编译器你在命令的末尾。
答案 8 :(得分:0)
';经常用于分隔一位C ++源代码,表明它有意与以下代码分开。为了了解它是如何有用的,让我们假设我们没有使用它:
例如:
#include <iostream>
int f() { std::cout << "f()\n"; }
int g() { std::cout << "g()\n"; }
int main(int argc)
{
std::cout << "message"
"\0\1\0\1\1"[argc] ? f() : g(); // final ';' needed to make this compile
// but imagine it's not there in this new
// semicolon-less C++ variant....
}
这个(可怕的)代码被调用,没有参数,argc
是1
,打印出来:
ef()\n
为什么不“messagef()\ n”?这是首先std::cout << "message"
给出的,然后"\0\1\0\1\1"[1]
是'\1'
- true
的布尔意义 - 建议调用f()
打印{{1} }?
因为......(鼓号)...在C ++中相邻的字符串文字被连接起来,所以程序的解析如下:
f()\n
这是做什么的:
std::cout << "message\0\1\0\1\1"[argc] ? f() : g();
(第二个)字符,这是第一个'e'[argc/1]
(打印)std::cout
转换为生成std::cout
的{{1}}(因为打印可能有效),因此bool
被称为......!鉴于此字符串文字串联对于指定长字符串非常有用 (甚至可读格式的更短的多行字符串),我们当然不希望假设这些字符串不应该连接。因此,如果分号消失,那么编译器必须假定连接是有意的,即使在视觉上上面代码的布局暗示不是这样。
这是一个令人费解的例子,说明C ++代码如何改变和改变意义。我敢肯定,如果我或其他读者想到它几分钟,我们可以提出其他 - 更简单 - 的例子。
无论如何,';'是必要通知编译器语句终止/分离是意图。
答案 9 :(得分:0)
如果我没记错的话,Kernighan和Ritchie称它为标点符号。
从技术上讲,它只是一个令牌(或编译器说话的终端),它
可以出现在语法中的特定位置,具有特定的语义
在语言中。运算符和其他标点符号之间的区别
有点人为,但在C或C ++的上下文中很有用,因为
一些令牌(,
,=
和:
)可以是运算符或标点符号,
取决于具体情况,例如:
f( a, b ); // comma is punctuation
f( (a, b) ); // comma is operator
a = b; // = is assignment operator
int a = b; // = is punctuation
x = c ? a : b; // colon is operator
label: // colon is punctuation
在前两个的情况下,区别很重要,因为用户 定义的重载只会影响运算符,而不会影响标点符号。
答案 10 :(得分:0)
它表示C ++语句的结束。
例如,
int i=0;
i++;
在上面的代码中有两个陈述。第一个用于声明变量,第二个用于将变量值递增1。