2015-03-26 2 views
2

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

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

motor[motorA] = 50; 

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

Мой партнер по команде случайно (или, возможно, намеренно) написал вместо

motor(motorA) = 50; 

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

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

Не могли бы вы объяснить, почему это работает?

+1

Извините за вводящий в заблуждение тег, но мне не хватает репутации для создания тега RobotC. – Blubber

+0

Я бы сказал, что, поскольку это язык студента, синтаксис не слишком строгий, если вы используете [] или() для доступа к индексу в массиве. Вы не должны думать об этом как о методе, называемом двигателем с параметром motorA, под крышками он, вероятно, будет преобразован в [] (или()) в любом случае, – Mathemats

+0

. Я попробую провести некоторое тестирование, но я не думаю, что они будет преобразовывать() в [], потому что на нем есть как массивы, так и функции. Возможно, компилятор достаточно умен, чтобы знать, когда конвертировать, но было бы странно, если бы они добавили эту функцию, когда они могли лучше улучшить компилятор ... например, указать правильный номер строки, где есть ошибка. – Blubber

ответ

2

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

Смежные вопросы