Подтвердить что ты не робот

Что такое точка с запятой в С++?

Грубо говоря, в С++ существуют операторы (+ , - * [] new ...), идентификаторы (имена классов, переменных, функции,...), const литералы (10, 2.5, "100",...), некоторые ключевые слова (int, class, typename, mutable, ...), скобки ({ } < > ), препроцессор (#, ## ...), Но что такое точка с запятой?

4b9b3361

Ответ 1

Точка с запятой является пунктуатором, см. 2.13 §1

Лексическое представление программ на С++ включает в себя ряд токенов предварительной обработки, которые используются в синтаксис препроцессора или преобразуются в токены для операторов и пунктуаторы

Ответ 2

Это часть синтаксиса и элемент из нескольких операторов. В 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> ';'

Этот список не заполнен. Пожалуйста, см. Мой комментарий.

Ответ 3

Точка с запятой находится справа под буквой p, и она выглядит так: ;

Ответ 4

Точка с запятой - это терминал, токен, который что-то завершает. То, что именно завершается, зависит от контекста.

Ответ 5

Точка с запятой - это терминатор утверждения.

Ответ 6

Точка с запятой обозначает последовательный состав. Он также используется для разграничения деклараций.

Ответ 7

Точка с запятой не дает определенного имени в стандарте С++. Это просто персонаж, который используется в некоторых произведениях грамматики (и это просто происходит в конце их довольно часто, поэтому "завершает" эти грамматические конструкции). Например, символ с запятой находится в конце следующих частей грамматики С++ (не обязательно полный список):

  • a expression-statement
  • a do/while iteration-statement
  • различные jump-statement s
  • simple-declaration

Обратите внимание, что в expression-statement выражение является необязательным. Поэтому "запуск" точек с запятой, ;;;;, действителен во многих (но не во всех) местах, где находится один.

Ответ 8

Точка с запятой позволяет компилятору узнать, что она достигла конца команды AFAIK.

Ответ 9

Точка с запятой (;) - это команда в С++. Он сообщает компилятору, что вы находитесь в конце команды.

Ответ 10

'; часто используются для разграничения одного бита исходного кода на С++, что указывает на намеренное выделение его из следующего кода. Чтобы увидеть, как это полезно, предположим, что мы не использовали его:

Например:

#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 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() печати f()\n?

Потому что... (drumroll please)... в С++ смежные строковые литералы конкатенируются, поэтому программа анализируется следующим образом:

std::cout << "message\0\1\0\1\1"[argc] ? f() : g();

Что это такое:

  • найдите символ [argc/1] (второй) в "сообщении\0\1\0\1\1", который является первым "e"
  • отправьте это 'e' на std::cout (распечатайте его)
  • тернарный оператор '?' запускает литье std::cout в bool, которое производит true (потому что печать предположительно сработала), поэтому f() вызывается...!

Учитывая, что это строковое литералирование конкатенации невероятно полезно для указания длинных строк (и даже более короткие многострочные строки в читаемом формате), мы, конечно же, не хотели бы предполагать, что такие строки не должны быть объединены. Следовательно, если точка с запятой ушла, то компилятор должен предположить, что конкатенация предназначена, хотя визуально макет кода выше означает в противном случае.

Это свернутый пример того, как код С++ с и без него; меняется смысл. Я уверен, что если я или другие читатели подумают об этом в течение нескольких минут, мы могли бы придумать другие - и более простые примеры.

В любом случае, ';' необходимо сообщить компилятору, что подразумевается завершение/разделение заявлений.

Ответ 11

Если я правильно помню, Керниган и Ричи называли это пунктуацией. Технически это просто токен (или терминал, в компиляторе), который может встречаться в определенных местах грамматики, с определенной семантикой на языке. Различие между операторами и другими пунктуациями является несколько искусственным, но полезным в контексте 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

В случае первых двух различий важно, поскольку пользователь определенная перегрузка влияет только на оператор, а не на пунктуацию.

Ответ 12

Он представляет собой конец инструкции С++.

Например,

 int i=0;
 i++;

В приведенном выше коде есть два утверждения. Первый - для объявления переменной, а второй - для увеличения значения переменной на единицу.