Как работает следующее определение функции?

#include <stdio.h>
void main() {
    extern int fun(float);
    int a=fun(3.5);
    printf("%d",a);
}

int fun(aa)
float aa;
{
    return ((int)aa);
}

Упомянутый выше блок кода отлично компилируется на моем компиляторе Visual Studio 8, хотя вывод является нежелательным. Но когда я скомпилировал тот же код на gcc-4.3.4, я получил следующую ошибку компиляции:

prog.c: 2: warning: тип возврата «main» не является «int»
prog.c: 8: error: конфликтующие типы для "развлечения"
prog.c: 3: error: здесь было предыдущее объявление «fun»

Как это будет работать, если оно имеет следующие свойства:

  1. Перед началом тела функции есть объявление переменной.
  2. Определение функции не имеет типа параметра переменной.
9
задан Kev 10 December 2011 в 14:13
поделиться