Post пример выполнить инструкцию «C» без точки с запятой (;)Можно ли выполнить инструкцию «C» без запятой
ответ
Неправильный ответ
... с новым правом ответьте ниже.
int main(void)
{
}
Пара скобок в определении main
является соединение-заявление, который является одним из допустимых форм для заявления.
Редактировать: хотя заявления может быть соединением-заявление и функции тела состоит из соединения-заявления, когда соединения-заявление является функцией тела , это не заявление .
Edit, Edit:
Эта программа не содержит заявление который выполняется, хотя:
int main(void)
{
if (1) {}
}
Хм, не вижу там утверждения - просто объявление и пустая функция тело. – caf
Тело функции состоит из составной инструкции. –
Тело, если main является (составным) утверждением в соответствии с грамматикой C. –
Эта линия является утверждение:
while (0) { }
как «бой» while (1) {} '? По крайней мере, вы проделали какую-то работу :) –
@Martinho: слишком утомительно. –
И еще один интересный факт о '1' против' 0'. Тот, у которого есть '0', может быть оптимизирован ни к чему, а тот, у которого есть' 1', не может. –
Вы можете выражение в if()
, если оно оценивается скаляром (целое число, плавающая точка t или указатель).
if (expr, 0) {}
В соответствии с грамматикой C, expr
является выражением. if(expr){}
- selection_statement
, так что это соответствовало бы счету.
Обратите внимание, что ,0
не всегда необходим, так как корпус if()
пуст. Так что это было бы эквивалентно заявление, если expr
возвращает скаляр:
if (expr) {}
while (expr, 0) {}
while (expr && 0) {}
while (expr || 0) {}
Все будет оценивать выражение один раз.
Это не сделает его заявлением, а выражением. Тем не менее все это (if и фигурные скобки). –
Не является вызовом функции, тоже? –
, когда используется внутри выражения, это выражение. –
Используйте эту функцию:
__asm {
mov al, 2
mov dx, 0xD007
out dx, al
}
Не оператор C, а проприетарная директива компилятора. – gnud
if (i=2) {} // give `i` a value
{ }
По крайней мере 15 символов требуется отправить ответ ...
Даже целая программа (мое GNU C построил его, несмотря на возвращенный код результата не определен). Вопрос: ПОЧЕМУ?
/* NEVER DO THIS!!! */
int main()
{
{}
}
И в C++, мы даже можем стабилизировать код возврата этой простой стек трюк с переменной (да, это грязно, я понимаю, но я думаю, что он должен работать в большинстве случаев):
/* NEVER RELY ON SUCH TRICKS */
int main()
{
if (int i=0) {}
}
почему обратная совместимость, я думаю. Он просто выдает предупреждение. –
К сожалению ... должно быть «почему мы должны закодировать что-то вроде этого» ... –
+1 для трюка в стеке. –
int main()
{
// This executes a statement without a semicolon
if(int i = 10)
{
// Call a function
if(Fibonacci(i)) {}
}
// I have made my point
return 0;
}
int Fibonacci(int n)
{
return (n == 2) ? 1 : Fibonacci(n - 2) + Fibonacci(n - 1);
}
#define _ ;
int main()
{
return 0 _
}
Что это? Домашнее задание? –
Это не хороший вопрос. Пожалуйста, будьте более конкретным! void main (void) {} - утверждение без ';' – Shirkrin
@Shirkrin: Определение функции! = Statement –