怎样理解C语言中的函数

怎样理解C语言中的函数,第1张

许多程序设计语言中,可以将一段经常需要使用的代码封装起来,在需要使用时可以直接调用,这就是程序中的函数。如C语言中:int max(int x,int y){return(x>yx:y;);}就是一段比较两数大小的函数,函数有参数与返回值。C++程序设计中的函数可以分为两类:带参数的函数和不带参数的函数。这两种参数的声明、定义也不一样。 带有(一个)参数的函数的声明:类型名标示符+函数名+(类型标示符+参数){}不带参数的函数的声明:void+函数名( ){

}花括号内为函数体。带参数的函数有返回值,不带参数的没有返回值。 C++中函数的调用:函数必须声明后才可以被调用。调用格式为:函数名(实参)调用时函数名后的小括号中的实参必须和声明函数时的函数括号中的形参个数相同。有返回值的函数可以进行计算,也可以做为右值进行赋值。 C语言中的部分函数:main(主函数)max(求最大数的函数)scanf(输入函数)printf(输出函数)

在主函数里的是实参,在子函数里的是形参。因为在真正执行的时候是把实参传递给形参来执行的,所以实参才是实际的参数。

比如:

int jjj(int a, int b)

void main()

{

int x, int y;

jjj(x, y);

}

a、b是形参,x和y是实参。

而调用与被调用是相互的,

int aa(){}

int bb(){;aa();}此时,bb函数调用了aa函数,即aa被bb函数调用。

函数定义就是根据不同开发语言的开发规范把一定的逻辑代码写到一个代码块里面,不同语言定义有细微差别。

一个函数定义是一个可执行的表达式, 执行结果是一个类型为 function 的值。 当 Lua 预编译一个代码块时, 代码块作为一个函数,整个函数体也就被预编译了。 那么,无论何时 Lua 执行了函数定义, 这个函数本身就进行了 实例化(或者说是 关闭了)。 这个函数的实例(或者说是 闭包)是表达式的最终值。

形参被看作是一些局部变量, 它们将由实参的值来初始化:

parlist ::= namelist [‘,’ ‘’] | ‘’

当一个函数被调用, 如果函数并非一个 可变参数函数, 即在形参列表的末尾注明三个点 (''), 那么实参列表就会被调整到形参列表的长度。 变长参数函数不会调整实参列表; 取而代之的是,它将把所有额外的参数放在一起通过 变长参数表达式传递给函数, 其写法依旧是三个点。 这个表达式的值是一串实参值的列表, 看起来就跟一个可以返回多个结果的函数一样。 如果一个变长参数表达式放在另一个表达式中使用, 或是放在另一串表达式的中间, 那么它的返回值就会被调整为单个值。 若这个表达式放在了一系列表达式的最后一个, 就不会做调整了 (除非这最后一个参数被括号给括了起来)。

一个函数定义是一个可执行的表达式, 执行结果是一个类型为 function 的值。 当 Lua 预编译一个代码块时, 代码块作为一个函数,整个函数体也就被预编译了。 那么,无论何时 Lua 执行了函数定义, 这个函数本身就进行了 实例化(或者说是 关闭了)。 这个函数的实例(或者说是 闭包)是表达式的最终值。

形参被看作是一些局部变量, 它们将由实参的值来初始化:

parlist ::= namelist [‘,’ ‘’] | ‘’

当一个函数被调用, 如果函数并非一个 可变参数函数, 即在形参列表的末尾注明三个点 (''), 那么实参列表就会被调整到形参列表的长度。 变长参数函数不会调整实参列表; 取而代之的是,它将把所有额外的参数放在一起通过 变长参数表达式传递给函数, 其写法依旧是三个点。 这个表达式的值是一串实参值的列表, 看起来就跟一个可以返回多个结果的函数一样。 如果一个变长参数表达式放在另一个表达式中使用, 或是放在另一串表达式的中间, 那么它的返回值就会被调整为单个值。 若这个表达式放在了一系列表达式的最后一个, 就不会做调整了 (除非这最后一个参数被括号给括了起来)。

第一:一组特殊的函数接口以及钩子,这组接口可用于构建出不同的调试器、性能剖析器、 或是其它需要从解释器获取“内部信息”的工具

11Lu a 没有内置的调试机制。 但是它提供了一组特殊的函数接口以及 钩子。 这组接口可用于构建出不同的调试器、性能剖析器、 或是其它需要从解释器获取“内部信息”的工具。

这是一个携带有有关函数或活动记录的各种信息的结构。 lu a_getstack 只会填充结构的私有部分供后面使用。 调用 lu a_getinfo 可以在 lu a_Debug 中填充那些可被使用的信息域。

下面对 lu a_Debug 的各个域做一个说明:

12创建这个函数的代码块的名字。 如果 source 以 '@' 打头, 指这个函数定义在一个文件中,而 '@' 之后的部分就是文件名。 若 source 以 '=' 打头, 剩余的部分由用户行为来决定如何表示源码。 其它的情况下,这个函数定义在一个字符串中, 而 source 正是那个字符串。

short_src: 一个“可打印版本”的 source ,用于出错信息。

13 linedefined: 函数定义开始处的行号。

14 lastlinedefined: 函数定义结束处的行号。

参数:what: 如果函数是一个 Lua 函数,则为一个字符串 "Lua" ; 如果是一个 C 函数,则为 "C"; 如果它是一个代码块的主体部分,则为 "main

currentline: 给定函数正在执行的那一行。 当提供不了行号信息的时候, currentline 被设为 -1

15 name: 给定函数的一个合理的名字。 因为 Lua 中的函数是一等公民, 所以它们没有固定的名字: 一些函数可能是全局复合变量的值, 另一些可能仅仅只是被保存在一张表的某个域中。 lua_getinfo 函数会检查函数是怎样被调用的, 以此来找到一个适合的名字。 如果它找不到名字, name 就被设置为 NULL 。

16 namewhat: 用于解释 name 域。 namewhat 的值可以是 "global", "local", "method", "field", "upvalue", 或是 "" (空串)。 这取决于函数怎样被调用。 (Lua 用空串表示其它选项都不符合。)

17 istailcall: 如果函数以尾调用形式调用,这个值就为真。 在这种情况下,当层的调用者不在栈中。

nups: 函数的上值个数。

nparams: 函数固定形参个数 (对于 C 函数永远是 0 )。

isvararg: 如果函数是一个可变参数函数则为真 (对于 C 函数永远为真)

在各类编程语言中,函数是一种过程,也称为子程序,它执行一个指定的运算或 *** 作函数有内部函数或称标准函数,外部函数也即用户定义函数等能被程序或主函数调用C语言中,函数的形式分无参和有参两类无参函数不带回或带回函数值有参函数在调用和被调用间有传递数据(变量)

以上就是关于怎样理解C语言中的函数全部的内容,包括:怎样理解C语言中的函数、C语言中的函数指的是什么 详细一点 谢谢、程序开发函数的定义怎么定义呢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10033924.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-04
下一篇2023-05-04

发表评论

登录后才能评论

评论列表(0条)

    保存