Я не знаю много о C, но я понимаю основы, и, насколько я могу сказать:Каким образом утверждения на C синтаксически однозначны?
int main() {
if (1 == 1) printf("Hello World!\n");
return 0;
}
и
int main() {
if (1 == 1)
printf("Hello World!\n");
return 0;
}
и
int main() {
if (1 == 1) {
printf("Hello World!\n");
}
return 0;
}
являются все точно синтаксически эквивалентны. Утверждение верно; строка печатается; фигурные скобки (по-видимому) необязательны.
Иногда, особенно здесь на SO, я вижу что-то вроде следующего:
int main() {
if (1 == 1)
printf("one is one\n");
printf("is this inside the if statement??/who kn0WS\n");
return 0;
}
Властью в CodeGolf, я привел полагать, что С пробельные агностик; лексический анализатор разбивает токены на свои составные части и пропускает пробелы вне строк.
(я имею в виду, вся причина для запятой-на-каждый оператор-вещи, так что синтаксический анализатор может лишить \n
, \t
, буквенных пространств и до сих пор знает, где заканчивается каждое утверждение, верно ??)
Итак, как можно однозначно разобрать предыдущий бит кода (или, может быть, кто-то может придумать лучший пример того, что я имею в виду), если игнорировать пробелы?
Если программисты C хотят писать в синтаксисе, зависящем от пробела, то почему они пишут C, и почему он учит везде, где C учит, что писать лексически двусмысленно (как мне, программисту, так и компьютеру) такие заявления?
Почему вы не читали С11 проект стандарта, 'в разделе 6.8.4 заявления выбора '(возможно, также' 6.8.2 Compound statement'), посмотрите, можете ли вы это понять? – EOF