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
на второй строке вашего кода.