C之函数原型

  C中函数原型的作用是在调用函数之前通知编译器函数的类型(返回值的类型)、名称、参数的个数和分别使用什么数据类型。函数原型的生命有多重不同的形式,介绍如下:

  【标准形式】:

#include<stdio.h>
int imin(int m, int n);//声明一个函数,返回两个int型数据中较小的一个
int main(void){
   int m;
   int n;
   int min;
   m = 5;
   n = 6;
   min = imin(m, n);

   return 0;
}

int imin(int m, int n){//定义imin函数的具体实现
   return (m < n) ? m : n;
}

  在main函数之前声明了imin函数,也可以这样声明:

int imin(int, int);//声明一个imin函数,返回两个int数据中较小的一个

以上两种都属于标准的形式。十分推荐使用上面两种中的任意一种。

  除了标准形式之外,还有其他的声明形式,虽然可以编译运行,但不建议使用如下的几种形式:

  1、在声明出直接定义:即在声明函数时直接给出函数的定义,一般用在函数很小、功能很简单的时候。上面的代码还可以这样写:

#include<stdio.h>
int imin(int m, int n){//声明一个imin函数,并直接给出函数实现
   return (m < n) ? m : n;
}

int main(void){
   int m;
   int n;
   int min;
   m = 5;
   n = 6;
   min = imin(m, n);

   return 0;
}

  2、在main函数中声明:即在main函数中声明,但一定要在函数调用前声明。示例如下:

#include<stdio.h>
int main(void){
   int m;
   int n;
   int min;
   m = 5;
   n = 6;

   int imin(int m, int n);//声明一个函数,返回两个int型数据中较小的一个
   min = imin(m, n);//声明必须在此行之前

   return 0;
}

int imin(int m, int n){//定义imin函数的具体实现
   return (m < n) ? m : n;
}

  3、声明中不给出参数:声明中只给出函数类型和名字,不给出参数列表。示例为:

#include<stdio.h>
int imin();//声明一个函数,返回两个int型数据中较小的一个,但不给出参数列表
int main(void){
   int m;
   int n;
   int min;
   m = 5;
   n = 6;
   min = imin(m, n);

   return 0;
}

int imin(int m, int n){//定义imin函数的具体实现
   return (m < n) ? m : n;
}

这样在一些编译器中会报错无法编译,但在另外一些编译器中可以编译成功。

  这样的例子还包括当函数没有返回值时不使用void。

  这样做的坏处是,这种函数声明没有告诉编译器函数的参数列表,在进行函数调用时编译器就不能检查出由于参数类型或个数的错误而导致的执行失败。所以非常不建议使用这种方式声明函数,虽然有些编译器可以编译通过。

  【总结】:C语言在对待函数声明中的原则是:必须在函数调用之前进行函数的声明。非常推荐使用标准的声明方式,这样可以使代码保持更好的结构,增强代码的可读性。对于其他的一些声明方式,虽然目前有些编译器中可以编译运行,但不推荐使用,随着版本的变化,一些现在可用的声明方式也许会在以后被禁止使用。

时间: 2024-10-05 04:42:36

C之函数原型的相关文章

“函数声明”、“函数原型”与“函数定义”辨析

最近在看一本关于C的书,对函数声明和函数定义的定义很是模糊,分不清楚,百度了一下,发现一篇帖子写的很是不错,转载过来: 原文: 对函数的“定义”和“声明”不是一回事.函数的定义是指对函数功能的确立,包括指定函数名,函数值类型.形参及其类型以及函数体等,它是一个完整的.独立 的函数单位.而函数的声明的作用则是把函数的名字,函数类型以及形参的类型.个数和顺序通知编译系统,以便在调用该函数时进行对照检查(例如,函数名是否 正确,实参与形参的类型和个数是否一致),它不包括函数体.————谭浩强 ,<C程

函数原型prototype以及对象的隐式原型__prot0__的基本了解

prototype原型: 一. 函数与对象的关系    1. 函数是对象的一种(函数是对象类型)        例: function fn1(){.........}           console.log(fn1 instanceof Object);           返回true,说明函数(fn1)是对象类型. 2. 对象是由函数创建的       例: var obj = new Object();           var arr = new Array(3);       

void swap(int a,int b)这样一个函数原型能交换两个数么?可以!!

昨天在指导别人指针的时候,突发奇想想到这么一道题,我觉得挺有意思的,发给大家看看,虽然不是什么很高级的技术,但是是个很有趣的思路..... 题目就是: void swap(int a,int b)这个函数原型,不能用全局变量与静态变量的情况下,怎么实现交换两个数? 如果你有兴趣可以思考一下,如果没兴趣就直接看下面的答案吧. --------------------------------------------------华丽的分割线-------------------------------

基类中定义的虚函数在派生类中重新定义时,其函数原型,包括返回类型、函数名、参数个数、参数类型及参数的先后顺序,都必须与基类中的原型完全相同 but------&gt; 可以返回派生类对象的引用或指针

您查询的关键词是:c++primer习题15.25 以下是该网页在北京时间 2016年07月15日 02:57:08 的快照: 如果打开速度慢,可以尝试快速版:如果想更新或删除快照,可以投诉快照. 百度和网页 http://bbs.csdn.net/topics/380238133 的作者无关,不对其内容负责.百度快照谨为网络故障时之索引,不代表被搜索网站的即时页面. 首页 精选版块 移动开发 iOS Android Qt WP 云计算 IaaS Pass/SaaS 分布式计算/Hadoop J

函数原型属性-JavaScript深入浅出(三)

前两次总结了JavaScript中的基本数据类型(值类型<引用类型>,引用类型<复杂值>)以及他们在内存中的存储,对内存空间有了一个简单的了解,以及第二次总结了this深入浅出的用法,我们知道了this的用法取决于函数四种调用的方式. 这一次我们来对JavaScript中原型以及原型链做一个深入浅出的理解. JavaScript深入浅出系列 1)复杂值vs原始值&&内存空间 - JavaScript深入浅出(一) 2)this的用法 – JavaScript深入浅出

C语言strcat,ctrcpy函数原型和改进

函数原型如下: char *strcpy(char *strDest, const char *strSrc) { char *address=strDest; assert((strDest!=NULL) && (strSrc!=NULL)); while(*strSrc!='\0') { *strDest++=*strSrc++; } *strDest='\0'; return address; } char *strcat(char *strDest, const char *str

Linux中快速找到函数原型的方法

在Linux的控制台,输入man命令,即可查看对应函数原型,用法,及所需要的头文件啦 eg: man stat 但是你会发现这个stat是一个Linux 命令,不是我们想查找的函数.那是因为我们找错了章节.stat函数的用法应该在第二章节,即man 2 stat;

已知strcpy的函数原型:char *strcpy(char *strDest, const char *strSrc),编写函数 strcpy

已知strcpy的函数原型:char *strcpy(char *strDest, const char *strSrc)其中strDest 是目的字符串,strSrc 是源字符串.不调用C++/C 的字符串库函数,请编写函数 strcpy. /*编写strcpy函数(10分)已知strcpy函数的原型是??? char *strcpy(char *strDest, const char *strSrc);??? 其中strDest是目的字符串,strSrc是源字符串.(1)不调用C++/C的字

MFC消息映射及消息处理函数原型

MFC把消息主要分为三大类: 1. 标准Windows消息(WM_XXX) 2. 命令消息(WM_COMMAND):凡由UI对象产生的消息都是这种命令消息,可能来自菜单或加速键或工具栏按钮. 3. 控件Notification消息 下面是各种消息的消息映射及对应处理函数原型: WM_COMMAND消息与处理对应规则: 消息映射 对应处理函数原型 ON_COMMAND(<id>, <memberFxn>) afx_msg void memberFxn(); ON_COMMAND_EX

为下面的函数原型编写函数定义:int ascii_to_integer(char *str)

为下面的函数原型编写函数定义: int ascii_to_integer(char *str); 这个字符串参数必须包含一个或者多个数字,函数应该把这些数字字符转换为整数并返回这个整数.如果字符串参数包含了任何非数字字符,函数就返回零.请不必担心算数溢出. 提示:这个技巧很简单:你每发现一个数字,把当前值乘以10,并把这个值和新的数字所代表的值相加.字符指针减去'0'即将其对应的ASCII码值转换为整型. #include <stdio.h> int ascii_to_integer(char