在C++行尾写一个分号或多个分号是否会改变任何内容

  • 本文关键字:任何内 改变 是否 一个 C++ c++
  • 更新时间 :
  • 英文 :


就像在这种情况下一样:

void function(){
...
uint8_t type = some_func(arg);;
...
}

我知道分号是 c++ 中语句的结尾,但是编写多个分号会影响一点点处理时间吗?

它可以影响事物。例如,这个 if 语句格式不正确

if(foo())
bar();;
else
baz();

额外的分号引入了一个空语句。该语句不执行任何操作,但它破坏了elseif的关联。当然,出于这些原因,明智地使用大括号({}(作为复合语句是普遍的智慧(因此这可能很少发生在好的代码库中(。但既然你确实问了,这是额外的 sem-colon 影响解析的一种方式。

至于处理时间,假设程序格式良好。您将看不到空语句的任何效果。

这样的分号引入了一个无效的空语句。

例如,当循环主体为空时,可以在循环中使用 null 语句。

下面是一个循环,用于设置指向字符串终止零的指针。

char *p = s;
for ( ; *p; ++p );

在 C 语言中,当标签位于声明之前时,您需要在标签后使用 null 语句,因为在 C 中,标签不能放在声明之前。

这是一个演示程序

#include <stdio.h>
int main(void) 
{
const unsigned int N = 10;
unsigned int i = 1;
L:; 
unsigned long long int square = i * i;
printf( "%ut%2llun", i, square );
if ( ++i < N ) goto L;
return 0;
}

注意施工

L:; 

很多时候,初学者在循环后错误地放置了一个分号时会犯错误。例如

#include <iostream>
#include <cctype>
int main() 
{
const char * s = "hello";
const char *p = s;
for ( ; *p; ++p );
{
std::cout << char( std::toupper( ( unsigned char )*p ) );
}
std::cout << 'n';
return 0;
}

程序不会输出字符序列"HELLO"而是不输出任何内容。

*与分号类似,某些C++结构接受冗余逗号。例如,在初始值设定项的大括号列表中。

int a[] = { 1, 2, 3, };
^^

但是,您不能将这样的逗号放在参数声明列表中

void f( int x1, int x2, int x3, );
^^^^ compilation error

另一个分号之后的分号(或 if (...( 之后(、for(...( 之后等(引入了一个不执行任何操作的语句。 它可能有害,例如在以下情况下:

if (x > 0)
std::cout << "x is positive";;
else
std::cout << "x is negative or zero";

这与

if (x > 0)
std::cout << "x is positive";
;
else
std::cout << "x is negative or zero";

第二个分号以 if-block 结尾,使以下 else 成为"孤立项"(否则没有 if(,从而导致编译错误。

应避免使用额外的分号。

最新更新