-2

От bruce eckel - «хотя u всегда должен объявлять функции, включая заголовочный файл, объявления функций не являются« важными в c ». Его возможно в c, но не cpp для вызова функции u havent объявлен. Это опасная практика, потому что c-компилятор может предположить, что функция, вызываемая с помощью целочисленного аргумента, имеет список аргументов, содержащий целое число, даже если оно может содержать float. Это может привести к ошибкам «мой вопрос в том, что даже если функция не объявлена, во время ее определения мы должны упомянуть тип данных аргументов [VOID FUNC (INT A)], поэтому как компилятор может считать, что float является целым числом?Необходимость объявления функции в c и cpp

+0

Предположим, что компилятор видит 'foo (8)'. Следует ли предположить, что foo принимает целое число или float? Если вы ожидаете, что все авторы программного обеспечения будут достаточно осторожны, чтобы написать 'foo (8.0)', у вас будет грубое пробуждение. –

ответ

1

Компилятор делает допущение о поставляемых параметрах, если функция не объявлена ​​или не определена до того, как должно быть сделано предположение. Попробуйте следующий код и проверьте результат (проверено с помощью gcc):

#include <stdio.h> 

int main (int argc, char * argv[]) 
{ 
     x(1); 
     x(1.); 
     x(1); 
     return 0; 
} 

void x(double y) 
{ 
    printf ("%f\n", y); 
}