Qubc
@Qubc
Ненавижу полисемию.

Что есть структура, а что оператор в C?

Увидел перевод в 7-ом издании Дейтла "Как программировать на С".
В старой книге названия параграфов переведены как "структура if", "структура while".
В новой переведено "оператор if", "оператор while".

Например, есть описание понятия "оператор" :
Вся строчка printf("%.2f\n", A/B ) с точкой с запятой (символ конца оператора) называется оператором.

В старой книге:
В теле структуры выбора if предполагается наличие только одного оператора. Чтобы включить несколько операторов, заключите этот набор операторов в фигурные скобки {}. Такая совокупность называется составным оператором.

В новой:
В теле оператора выбора if предполагается наличие только одного оператора. Чтобы включить несколько операторов, заключите этот набор операторов в фигурные скобки {}. Такая совокупность называется составным оператором или блоком.

Вопрос тогда такой.
Как называть по-человечески строчки:
if ( a > b )
	printf("something\n");

Оператор if, которые создает структуру с одиночным выбором, с оператором printf ?

if ( a > b ) printf("something\n"); - вот так если переписать, это один оператор или два?

А такое:
if(condition) {
	printf("something1\n");
	printf("something2\n");
}

Составной оператор if, который создает структуру с одиночным выбором и двумя операторами?
  • Вопрос задан
  • 258 просмотров
Решения вопроса 1
myjcom
@myjcom
Переводчики имели ввиду структуры из https://ru.m.wikipedia.org/wiki/Структурное_програ...
Они же statements https://en.cppreference.com/w/c/language/statements

А не keyword struct https://en.cppreference.com/w/c/language/struct

А operators это вообще https://en.cppreference.com/w/c/language/expressio...

Это переводчики, такие переводчики.
Оригинал посмотрите, как там написано.

6th - 7th
3.4 Control Structures
Normally, statements in a program are executed one after the other in the order in which
they’re written. This is called sequential execution. Various C statements we’ll soon discuss
enable you to specify that the next statement to be executed may be other than the
next one in sequence. This is called transfer of control.
...
...
Bohm and Jacopini’s work demonstrated that all programs could be written in terms
of only three control structures, namely the sequence structure, the selection structure
and the repetition structure. The sequence structure is built into C. Unless directed otherwise,
the computer executes C statements one after the other in the order in which
they’re written.
The flowchart segment of Fig. 3.1 illustrates C’s sequence structure.

Bohm, C., and G. Jacopini, “Flow Diagrams, Turing Machines, and Languages with Only Two Formation
Rules,” Communications of the ACM, Vol. 9, No. 5, May 1966, pp. 336–371.


дальше везде statemens
3.5 The if Selection Statement
Selection statements are used to choose among alternative courses of action. For example,
suppose the passing grade on an exam is 60. The pseudocode statement


почему то переводят как Оператор выбора if

Еще раз - Statements are fragments of the C program that are executed in sequence. -> см. https://en.cppreference.com/w/c/language/statements

Operators -> https://en.cppreference.com/w/c/language/expressio...

что бы не путаться Statement - инструкция. Operator - оператор
в переводах может встречаться условный оператор if, составной оператор if ...

короче говоря русский язык иногда/часто не имеет точных аналогов для перевода, поэтому трактуют как договорятся.
Вот как переводить будут:
C language Expressions
An expression is a sequence of operators

C language Statements
Statements are fragments of the C program that are executed in sequence. The body of any function is a compound statement, which, in turn is a sequence of statements and declarations:

There are five types of statements:
1) compound statements
2) expression statements
3) selection statements
4) iteration statements
5) jump statements


Compound statements
A compound statement, or block, is a brace-enclosed sequence of statements and declarations.

{ statement | declaration...(optional) } (1)
The compound statement allows a set of declarations and statements to be grouped into one unit that can be used anywhere a single statement is expected (for example, in an if statement or an iteration statement):

if (expr) // start of if-statement
{ // start of block
  int n = 1; // declaration
  printf("%d\n", n); // expression statement
} // end of block, end of if-statement


И еще

Не смотря на то что С++
statement - инструкция
Слово statement обычно переводят на русский термином "оператор". Таким образом, мы и привыкли, что if, while, case и т.п. – это операторы. К сожалению, в С++ этот перевод приводит к трудностям, поскольку имеется термин operator - словом "оператор" естественно было бы переводить его. Из возможных и встречавшихся в русской литературе переводов statement (утверждение, предложение, инструкция) в переводе книжки Струструпа, посвященной третьему стандарту С++, принят термин "инструкция".


expression statement
инструкция-выражение
Инструкция, которая одновременно является и выражением. Примеры: присваивание, вызов функции.


operator - оператор
Встроенная операция языка, такая, как сложение. (Также перегруженная операция, задаваемая функцией-членом класса. -> к подмножеству Си не относится)

English-Russian glossary of C + +. 2014.
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
sergey-gornostaev
@sergey-gornostaev Куратор тега C
Седой и строгий
То, что вы называете структурой - на самом деле выражение.
Ответ написан
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
В стандарте языка используются термины "expression" (например, printf("something\n"), без точки с запятой -- это expression, а именно вызов функции) и "statement" (например if (expression) statement -- это statement), а иногда expression может быть statement'ом (например, printf("something\n");, с точкой с запятой), это называется "expression statement".

"expression" обычно переводится как "выражение" и не вызывает трудностей. Со "statement" сложнее. Мне нравятся переводы "конструкция" ("конструкция if", "конструкция switch") или "инструкция" ("инструкция goto", "инструкция return").


Как называть по-человечески строчки:
if ( a > b )
  printf("something\n");

Конструкция if с единственной инструкцией-выражением.

А такое:

if(condition) {
  printf("something1\n");
  printf("something2\n");
}

Конструкция if с составной инструкцией содержащей две инструкции-выражения.
Ответ написан
saboteur_kiev
@saboteur_kiev
software engineer
Конкретно в вашем случае, просто переводчики переводили не слово в слово, а по сути.
В одном случае под "структурой", переводчик имел ввиду весь синтаксис оператора if, подразумевая, что после if следует условие в скобках, а затем в фигурных скобках блок команд, если условие успешно и так далее.

В другой книге переводчик просто не называл это структурой, а сразу сказал что это синтаксис для оператора if.

Другими словами, в вашем конкретном случае структура if и оператор if одно и тоже.
Ответ написан
profesor08
@profesor08
a + b - выражение
if - оператор
+ - операция
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы