Home:ALL Converter>behaviour of implicit function declaration

behaviour of implicit function declaration

Ask Time:2017-07-03T10:35:27         Author:manifold

Json Formatter

I know it is wrong to use a function without prototype. But when I was fiddling around, I came across this strange and conflicting behavior.

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);
    }

Implicit function declaration would be int xof(int ,double );

error is

variablename.c:8:5: error: conflicting types for 'xof' int xof(char c,float f)

I understand this because implicitly generated function declaration (which defaults integer values to INT and decimals to DOUBLE) doesn't match the following function definition

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);
    }

implicit function declaration would be int xof(int); which should conflict with function definition

But this runs fine ( no error) and output is with 'a' behaving as 'int' value and 'b' has 'undefined Garbage'

-1 12260176

Could someone explain this. Thanks in advance.

Author:manifold,eproduced under the CC 4.0 BY-SA copyright license with a link to the original source and this disclaimer.
Link to original article:https://stackoverflow.com/questions/44877021/behaviour-of-implicit-function-declaration
yy