ROBOTC: Почему директивы препроцессора #pragma config() должны быть первыми строками исходного файла?

Я репетитор для старшекурсников по робототехнике, и мы используем robotC (для NXT robotics, версия 4.50) в качестве платформы выбора. Я заметил странную причуду в robotC: директивы препроцессора #pragma config по какой-то причине работают только тогда, когда они являются первыми строками программы.

#pragma config(Sensor, S1, touch, SensorTouch)
//comment
#pragma config(Sensor, S2, touch2, SensorTouch)

task main()
{
    while(true){
        nxtDisplayTextLine(0,"%i",SensorValue(touch));
        nxtDisplayTextLine(1,"%i",SensorValue(touch2));
    }
}

Когда я запускаю эту простую программу, я получаю следующие ошибки компиляции:

**Error**:'#pragma config(...)' must be first lines of source file
**Error**:Undefined variable 'touch2'. 'short' assumed.

В чем причина этой первой ошибки? Я не могу найти ничего в документации, перечисляющей причину, по которой #pragma config() должен быть первыми строками исходного файла, просто так и должно быть.

РЕДАКТИРОВАТЬ: уточнить. Я понимаю, что ошибка вызвана наличием комментария // во второй строке программы, так как строки #pragma config() должны быть первой строкой (строками) программы. Мне интересно, почему строки конфигурации #pragma ДОЛЖНЫ быть первыми.

1 ответ

Я не уверен в достоверности этого, но я нашел руководство ROBOTC из Penn State Abington. В руководстве упоминается, что операторы #pragma должны быть первыми несколькими строками. Позже будет сказано, что они даже должны быть до каких-либо комментариев. Таким образом, проблема, которая возникает здесь, вызвана

//comment

на второй строке вашего кода.

Другие вопросы по тегам