Грубо говоря, в С++ существуют операторы (+ , - * [] new ...)
, идентификаторы (имена классов, переменных, функции,...), const литералы (10, 2.5, "100",...)
, некоторые ключевые слова (int, class, typename, mutable, ...)
, скобки ({ } < > )
, препроцессор (#, ## ...)
, Но что такое точка с запятой?
Что такое точка с запятой в С++?
Ответ 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++;
В приведенном выше коде есть два утверждения. Первый - для объявления переменной, а второй - для увеличения значения переменной на единицу.