Function without return type specified in C

泪湿孤枕 提交于 2019-11-28 10:23:55

If you do not specify a return type or parameter type, C will implicitly declare it as int.

This is a "feature" from the earlier versions of C (C89 and C90), but is generally considered bad practice nowadays. Since the C99 standard (1999) does no longer allow this, a compiler targeting C99 or later will likely give you a warning similar to the following:

program.c: At top level:
program.c:8:1: warning: return type defaults to ‘int’
 workover(i)
 ^

The function declaration syntax was used in older versions of C, and is still valid, so the code fragment "workover(i) int i;" is equivalent to "workover(int i)". Although, I think it may still generate warnings or even errors, depending on what compiler options you use.

When I compile your code as $ gcc common.c -o common.exe -Wall (Trying it over Cygwin Terminal as I don't have my linux system with me right now)

I get following warnings:

common.c:3:1: warning: return type defaults to ‘int’ [-Wreturn-type]
main( )
^
common.c: In function ‘main’:
common.c:6:2: warning: implicit declaration of function ‘workover’ [-Wimplicit-f                  unction-declaration]
workover(i);
^
common.c: At top level:
common.c:9:1: warning: return type defaults to ‘int’ [-Wreturn-type]
workover(i)
^
common.c: In function ‘main’:
common.c:8:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
  1. The first and the third one says, return type defaults to ‘int’ which means that if you don't specify a return type, compiler will implicitly declare it as int.
  2. The second one says, implicit declaration of function ‘workover’ since the compiler doesn't know what workover is.
  3. Third warning is pretty simple to understand and will disappear if you fix the first one.

You should do it this way:

#include <stdio.h>

int workover(int);

int i;

int main(void)
{
    int i = 5;
    workover(i);
    printf("%d",i);     //prints 5
    return 0;
}

int workover(int i)
{
    i = i*i;    //i will have local scope, so after this execution i will be 25;
    return(i);  //returns 25
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!