Это действительная команда / инструкция C? - PullRequest
5 голосов
/ 01 марта 2011

Я просматриваю какой-то код, который сделал кто-то другой, и вижу это:

            if (numDetects == 0) {

                Table[Index].minF = 

            Table[Index].maxF = F;

            }

Таблица [Index] .minF = blank не имеет для меня никакого смысла.Я никогда не видел этого в своей жизни.НО код компилируется и запускается, так может кто-нибудь объяснить мне, возможно ли это или нет просто оставить знак равенства висящим там?Спасибо!

Ответы [ 5 ]

7 голосов
/ 01 марта 2011

Да;C не заботится о пробеле между первой строкой и второй, поэтому он видит его как

Table[Index].minF = Table[Index].maxF = F;

Это синтаксически эквивалентно

Table[Index].minF = (Table[Index].maxF = F);

с момента оператора присваивания = не только назначает левую часть правой стороне, но также возвращает значение, которое было присвоено.В этом случае это возвращаемое значение затем присваивается внешней левой стороне.

6 голосов
/ 01 марта 2011

Да, это то же самое, что и:

Table[Index].minF = Table[Index].maxF = F;

Оператор присваивания (=) может быть связан, как и любой другой оператор.Он оценивается справа налево, и каждая оценка возвращает значение, которое было присвоено.Так что это эквивалентно следующим двум утверждениям.

Table[Index].maxF = F;
Table[Index].minF = Table[Index].maxF;
2 голосов
/ 01 марта 2011

Это эквивалентно:

Table[Index].minF = Table[Index].maxF = F;
2 голосов
/ 01 марта 2011

Пробел не важен.Строка действительно читает

Table[Index].minF = Table[Index].maxF = F;

Что эквивалентно

int a;
int b;

a = b = 0;
1 голос
/ 01 марта 2011

Пробел игнорируется и все оценивается как ...

Table[Index].minF = Table[Index].maxF = F;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...