2013-06-19 2 views
0

Я сделал опечатку в программе на C, и я смущен, почему она скомпилирована и какова точка синтаксиса. Я пытался использовать оператор назначения умножения *=, но случайно набрал *-. Вот пример:Почему * - синтаксис/оператор действителен в C/C++?

#include <stdio.h> 
int main() 
{ 
    double foo = 1.2; 
    foo *- 3.4; /* I meant to type foo *= 3.4; */ 
    printf("%f\n", foo); 
    return 0; 
} 

Когда я компилировать код с gcc -Wall ctest.c (или г ++) Я получаю следующий вывод:

ctest.c: In function `int main()': 
ctest.c:5 warning: statement has no effect 

Выход printf заявления при выполнении этой программы является 1.200000. Таким образом, утверждение действительно не влияет на значение foo.

Что такое оператор *-? Есть ли веская причина, почему этот синтаксис компилируется, хотя утверждение не имеет никакого эффекта?

+4

Два оператора, '*' и унарные '-'. –

+0

Вау, об этом ответили невероятно быстро. Благодаря! – mowen

+0

Существует много [recrcketing]] (http://en.wikipedia.org/wiki/Rebracketing) вопросов о переполнении стека :) – dasblinkenlight

ответ

12

Два оператора

foo * (-3.4); 

С результатом выброшены. В заявлении нет левой части, поэтому компилятор, вероятно, полностью удалит это утверждение.

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