喵-见缝插针 2012-12-19 10:48 采纳率: 0%
浏览 471
已采纳

为什么一个没有参数的函数(与实际函数定义相比)要编译呢?

I've just come across someone's C code that I'm confused as to why it is compiling. There are two points I don't understand.

First, the function prototype has no parameters compared to the actual function definition. Second, the parameter in the function definition does not have a type.

#include <stdio.h>

int func();

int func(param)
{
    return param;
}

int main()
{
    int bla = func(10);    
    printf("%d", bla);
}

Why does this work? I have tested it in a couple of compilers, and it works fine.

转载于:https://stackoverflow.com/questions/13950642/why-does-a-function-with-no-parameters-compared-to-the-actual-function-definiti

  • 写回答

10条回答 默认 最新

  • local-host 2012-12-19 10:56
    关注

    All the other answers are correct, but just for completion

    A function is declared in the following manner:

      return-type function-name(parameter-list,...) { body... }
    

    return-type is the variable type that the function returns. This can not be an array type or a function type. If not given, then int is assumed.

    function-name is the name of the function.

    parameter-list is the list of parameters that the function takes separated by commas. If no parameters are given, then the function does not take any and should be defined with an empty set of parenthesis or with the keyword void. If no variable type is in front of a variable in the paramater list, then int is assumed. Arrays and functions are not passed to functions, but are automatically converted to pointers. If the list is terminated with an ellipsis (,...), then there is no set number of parameters. Note: the header stdarg.h can be used to access arguments when using an ellipsis.

    And again for the sake of completeness. From C11 specification 6:11:6 (page: 179)

    The use of function declarators with empty parentheses (not prototype-format parameter type declarators) is an obsolescent feature.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(9条)

报告相同问题?

悬赏问题

  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题