Как работает моторная функция робота C

Моя команда пишет код для RobotC, языка с C-подобным синтаксисом. Он в основном используется как введение в программирование в робототехнике. В нем есть базовые элементы C: операторы if, циклы for и while, функции и даже структуры, массивы и указатели, но они используются нечасто. Основное отличие состоит в том, что он интерпретируется, имеет многопоточность, не является бесплатным, и вы можете компилировать только один файл за раз.

Мы хотели сделать моторное движение. Для этого вы обычно пишете.

 motor[motorA] = 50;

motor — это массив, предоставленный RobotC, который содержит все значения, которые он установит для двигателей. motorA — это перечисление для проводного порта.
50 — это уровень мощности.

Мой товарищ по команде случайно (или, может быть, намеренно) написал это вместо этого

 motor(motorA) = 50;

Я уже собирался его поправить, как на удивление он скомпилировался и заработал нормально!

Я знаю Java и немного обычный C, и это просто не имеет для меня смысла. Вы не можете установить значение возврата функции... не так ли?

Может кто-нибудь объяснить, почему это работает?


person Blubber    schedule 26.03.2015    source источник
comment
Извините за вводящий в заблуждение тег, но у меня недостаточно представителей, чтобы создать тег RobotC.   -  person Blubber    schedule 27.03.2015
comment
Я бы сказал, что, поскольку это студенческий язык, синтаксис не слишком строг в отношении того, используете ли вы [] или () для перехода к индексу в массиве. Вы не должны думать об этом как о методе под названием motor с параметром motorA, под прикрытием он, вероятно, в любом случае преобразуется в [] (или () ),   -  person Mathemats    schedule 27.03.2015
comment
Я попробую провести некоторое тестирование, но я не думаю, что они будут конвертировать () в [], потому что в языке есть и массивы, и функции. Возможно, компилятор достаточно умен, чтобы знать, когда конвертировать, но было бы странно, если бы они добавили эту функцию, когда они могли бы улучшить компилятор намного лучше... например, указать правильный номер строки, где ошибка.   -  person Blubber    schedule 27.03.2015
comment
Описание языка довольно неадекватно, в нем даже не упоминаются массивы. У вас гораздо больше шансов найти помощь на форуме поставщика.   -  person Hans Passant    schedule 27.03.2015


Ответы (1)


Если вы посмотрите в RobotCIntrinsics.c (когда у вас открыт файл кода, просто щелкните правой кнопкой мыши одну из команд motor[] и выберите «Перейти к определению/объявлению» в контекстном меню, чтобы увидеть его), вы обнаружите, что моторная команда определяется как «свойство». Теперь я не могу сказать, что именно это означает, но по моему опыту это означает, что вы можете использовать [] или () для доступа к значениям в нем. Это не массив и не вызов функции. Это нечто совершенно другое, что, по-видимому, позволяет использовать оба синтаксиса.

person BurningLights    schedule 23.05.2015