2013-10-02 4 views
2

в коде ниже.почему эта программа не показывает никаких ошибок?

  • я определил прототип функции без аргумента
  • в определении, а также в вызове функции я использовал один параметр.

Я хотел бы знать, почему у меня нет ошибок?

# include <stdio.h> 
float circle();  /* no parameter*/ 
int main() 
{ 
    float area; 
    int radius =2; 
    area=circle(radius); 
    printf("%f \n",area); 
    return 0; 
} 

float circle(r) /* with one parameter even no parameter type */ 
{ 
    float a; 
    a=3.14*r*r; 
    return (a); 
} 
+0

Не жёстко пи. Используйте M_PI из math.h. EDIT: На самом деле я не думаю, что это стандарт C. Поэтому сначала проверьте. – Bathsheba

ответ

4

The

float circle(); 

не является функцией с нулевыми параметрами. Это функция с неопределенным количеством параметров.

The

float circle(r) { 

является К & определение R-стиль, в котором тип r по умолчанию для int. См https://stackoverflow.com/a/18433812/367273

+0

Теперь вопрос только в том, что 'float (int)' совпадает с 'float (...)' where '...' означает неопределенное количество аргументов. – RedX

2

Это потому, что компилятор лечить r как int по умолчанию, когда параметр не определен для circle. Попробуйте запустить свой код после объявления прототипа функции как

float circle(void); 

и вы получите сообщение об ошибке.

0

Это потому, что функция

float circle(); 

декларация не объявляет функцию, которая не принимает никаких аргументов.
Это неявно объявлено как функция, которая принимает неопределенное число целочисленных переменных в качестве аргументов.
Так же, как

function(); 

действует декларация функции. Неявно эта функция будет рассматриваться как функция, принимающая int в качестве аргументов и возвращающая int.
Если вы хотите объявить функцию функция не принимает никаких аргументов или не возвращает никакого значения, вы делаете это с void ключевым словом:

void funct(void); 
Смежные вопросы