Я знаю, что использовать функцию без прототипа неправильно. Но когда я возился, я столкнулся с этим странным и противоречивым поведением.
test1
#include <stdio.h>
#include <limits.h>
void main(){
char c='\0';
float f=0.0;
xof(c,f);/* at this point implicit function declaration is
generated as int xof(int ,double ); */
}
int xof(char c,float f)
{
printf("%d %f\n", c,f);
}
Неявное объявление функции будет иметь вид int xof (int, double);
ошибка
имя_переменной.c: 8: 5: ошибка: конфликтующие типы для 'xof' int xof (char c, float f)
Я понимаю это, потому что неявно сгенерированное объявление функции (по умолчанию целочисленное значение равно INT, а десятичное - DOUBLE) не соответствует следующему определению функции.
test2
#include <stdio.h>
#include <limits.h>
void main(){
unsigned int a =UINT_MAX;
int b=0;
xof(a); /* implicit function declaration should be int xof(int); */
}
int xof(unsigned a,int b)
{
printf("%d %d\n", a,b);
}
неявным объявлением функции будет int xof (int);, что должно противоречить определению функции.
Но это работает нормально (без ошибок), и на выходе 'a' ведет себя как значение 'int', а 'b' имеет 'undefined Garbage '
-1 12260176
Может кто-нибудь объяснить это. Заранее спасибо.