程序开发中的经常谈到的函数及使用的有哪些?

作者&投稿:相婕 (若有异议请与网页底部的电邮联系)
程序开发中有一些常用的,比如系统函数,都有哪些?~

系统函数有许多,比如字符串函数,时间函数,文件函数等,下面是常用的一些函数
把指针 s 指向的长度为 len 的字符串压栈。 Lua 对这个字符串做一个内部副本(或是复用一个副本), 因此 s 处的内存在函数返回后,可以释放掉或是立刻重用于其它用途。 字符串内可以是任意二进制数据,包括零字符。
将指针 s 指向的零结尾的字符串压栈。 因此 s 处的内存在函数返回后,可以释放掉或是立刻重用于其它用途。
返回内部副本的指针。
如果 s 为 NULL,将 nil 压栈并返回 NULL
把 t[n] 的值压栈, 这里的 t 是指给定索引处的表。 这是一次直接访问;就是说,它不会触发元方法。
返回入栈值的类型。
lu a_rawgetp
int lu a_rawgetp (lua_State *L, int index, const void *p);
把 t[k] 的值压栈, 这里的 t 是指给定索引处的表, k 是指针 p 对应的轻量用户数据。 这是一次直接访问;就是说,它不会触发元方法。
返回给定索引处值的固有“长度”: 对于字符串,它指字符串的长度; 对于表;它指不触发元方法的情况下取长度操作('#')应得到的值; 对于用户数据,它指为该用户数据分配的内存块的大小; 对于其它值,它为 0 。
l ua_rawset
void lua_rawset (lua_State *L, int index);
类似于 lua_settable , 但是是做一次直接赋值(不触发元方法)。
等价于 t[k] = v , 这里的 t 是指给定索引处的表, k 是指针 p 对应的轻量用户数据。 而 v 是栈顶的值。
这个函数会将值弹出栈。 赋值是直接的;即不会触发元方法。
用到的读取器函数, 每次它需要一块新的代码块的时候, lua_load 就调用读取器, 每次都会传入一个参数 data 。 读取器需要返回含有新的代码块的一块内存的指针, 并把 size 设为这块内存的大小。 内存块必须在下一次函数被调用之前一直存在。 读取器可以通过返回 NULL 或设 size 为 0 来指示代码块结束。 读取器可能返回多个块,每个块可以有任意的大于零的尺寸。

函数有很多,比如下面几个很常见也很常用:
int lua_checkstack (lua_State *L, int n);
确保堆栈上至少有 n 个额外空位。 如果不能把堆栈扩展到相应的尺寸,函数返回假。 失败的原因包括将把栈扩展到比固定最大尺寸还大 (至少是几千个元素)或分配内存失败。 这个函数永远不会缩小堆栈; 如果堆栈已经比需要的大了,那么就保持原样。
void lua_close (lua_State *L);
销毁指定 Lua 状态机中的所有对象 (如果有垃圾收集相关的元方法的话,会调用它们), 并且释放状态机中使用的所有动态内存。 在一些平台上,你可以不必调用这个函数, 因为当宿主程序结束的时候,所有的资源就自然被释放掉了。 另一方面,长期运行的程序,比如一个后台程序或是一个网站服务器, 会创建出多个 L ua 状态机。那么就应该在不需要时赶紧关闭它们。
int lua_compare (lua_State *L, int index1, int index2, int op);
比较两个 Lua 值。 当索引 index1 处的值通过 op 和索引 index2 处的值做比较后条件满足,函数返回 1 。 这个函数遵循 Lua 对应的操作规则(即有可能触发元方法)。 反之,函数返回 0。 当任何一个索引无效时,函数也会返回 0 。
op 值必须是下列常量中的一个:
LUA_OPEQ: 相等比较 (==)
LUA_OPLT: 小于比较 (<)
LUA_OPLE: 小于等于比较 (<=)
void lua_concat (lua_State *L, int n);
连接栈顶的 n 个值, 然后将这些值出栈,并把结果放在栈顶。 如果 n 为 1 ,结果就是那个值放在栈上(即,函数什么都不做); 如果 n 为 0 ,结果是一个空串。 连接依照 Lua 中通常语义完成
void lua_copy (lua_State *L, int fromidx, int toidx);
从索引 fromidx 处复制一个值到一个有效索引 toidx 处,覆盖那里的原有值。 不会影响其它位置的值。
销毁指定 Lua 状态机中的所有对象 (如果有垃圾收集相关的元方法的话,会调用它们), 并且释放状态机中使用的所有动态内存。 在一些平台上,你可以不必调用这个函数, 因为当宿主程序结束的时候,所有的资源就自然被释放掉了。 另一方面,长期运行的程序,比如一个后台程序或是一个网站服务器, 会创建出多个 L ua 状态机。那么就应该在不需要时赶紧关闭它们。

用到的读取器函数, 每次它需要一块新的代码块的时候, lu a_load 就调用读取器, 每次都会传入一个参数 data 。 读取器需要返回含有新的代码块的一块内存的指针, 并把 size 设为这块内存的大小。 内存块必须在下一次函数被调用之前一直存在。 读取器可以通过返回 NULL 或设 size 为 0 来指示代码块结束。 读取器可能返回多个块,每个块可以有任意的大于零的尺寸。
从给定有效索引处移除一个元素, 把这个索引之上的所有元素移下来填补上这个空隙。 不能用伪索引来调用这个函数,因为伪索引并不指向真实的栈上的位置。
把栈顶元素放置到给定位置而不移动其它元素 (因此覆盖了那个位置处的值),然后将栈顶元素弹出。
在给定线程中启动或延续一条协程 。
要启动一个协程的话, 你需要把主函数以及它需要的参数压入线程栈; 然后调用 lu a_resume , 把 nargs 设为参数的个数。 这次调用会在协程挂起时或是结束运行后返回。 当函数返回时,堆栈中会有传给 lu a_yield 的所有值, 或是主函数的所有返回值。 当协程让出, lu a_resume 返回 LUA_YIELD , 若协程结束运行且没有任何错误时,返回 0 。 如果有错则返回错误代码ua_pcall )。
在发生错误的情况下, 堆栈没有展开, 因此你可以使用调试 API 来处理它。 错误消息放在栈顶在。
要延续一个协程, 你需要清除上次 l ua_yield 遗留下的所有结果, 你把需要传给 yield 作结果的值压栈, 然后调用 l ua_resume 。
参数 from 表示协程从哪个协程中来延续 L 的。 如果不存在这样一个协程,这个参数可以是 NULL 。
l ua_rotate
void l ua_rotate (lua_State *L, int idx, int n);
把从 idx 开始到栈顶的元素轮转 n 个位置。 对于 n 为正数时,轮转方向是向栈顶的; 当 n 为负数时,向栈底方向轮转 -n 个位置。 n 的绝对值不可以比参于轮转的切片长度大。
把指定状态机的分配器函数换成带上用户数据 ud 的 f 。
l ua_setfield
void lua_setfield (l ua_State *L, int index, const char *k);
做一个等价于 t[k] = v 的操作, 这里 t 是给出的索引处的值, 而 v 是栈顶的那个值。
这个函数将把这个值弹出栈。 跟在 Lua 中一样,这个函数可能触发一个 "newindex" 事件的元方法

什么叫编程函数?他有什么作用?c++的结构是怎样的?
答:我下面说的就是函数的定义,如果你不能完全理解的话我建议你先看看下面的C语言结构,不然别人再怎么给你解释你也听不明白:(在某个变化过程中,有两个变量x、y,如果给定自变量x一个值,那么应变量有且只有一个变量与之对应,那么我们称y是x的函数。人们对C++有许多不同的看法,保守的C++程序员坚持用其他语言创建COM...

程序开发函数的定义怎么定义呢?
答:函数定义就是根据不同开发语言的开发规范把一定的逻辑代码写到一个代码块里面,不同语言定义有细微差别。一个函数定义是一个可执行的表达式, 执行结果是一个类型为 function 的值。 当 Lua 预编译一个代码块时, 代码块作为一个函数,整个函数体也就被预编译了。 那么,无论何时 Lua 执行了函数定义...

求pascal语言编程中的书上不太常见的但程序中会出现的函数。
答:power求次方,power(a,b)就是求a的b次方,要开启math库才能使用(程序前加一个“uses math”)random随机函数,random(x),求0到x间的任意的一个数(前面要加上一个randomize,不会让返回值每次一样)shr二进制函数,如x shr n指将x转化成二进制后向右移n位 shl二进制函数,与shr不同的是...

c++中函数的调用方式是什么?
答:先写出一个如下的函数:int fun(int n){ int s=1;for(int i=1;i<=n;i++)s*=i;return s;} 然后在主函数中调用反复调用它 int main(){ int n;while(cin>>n){ int sum=0;for(int i=1;i<=n;i++){ sum+=fun(i);} cout<<sum<<endl;} } ...

...方法(函数)?有什么好处?Java中的方法和C中的函数
答:4.提高程序的可维护性:将程序中的功能分解成多个独立的方法,可以降低程序的耦合度,有利于程序的维护和修改。Java中的方法和C中的方法在语法上有一些不同:1.Java中的方法必须属于某个类,而C中的方法可以是全局函数或属于某个结构体。2.Java中的方法可以有访问修饰符,如public、private、protected...

程序员开发用到的十大基本算法
答:虽然一直递归下去,但是这个算法总会退出,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。 算法二:堆排序算法 堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆...

使用socket API 开发通信程序中的客户端程序和服务器程序时,各需要哪些...
答:addr实际指向的是一个sockaddr_in的结构体,这个结构体如下 struct sockaddr_in{ short sin_family;unsigned short sin_port;struct in_addr sin_addr;char sin_zero[8];};sin_family是指选取可用网络的类型 sin_port,这个指端口,在bind中就是服务器要把自己的哪个端口开放用于接收...

Python在程序设计中,函数的使用有哪些作用?请具体阐述。
答:在所有编程语言中,函数的作用都是相似的 在开发程序的时候,某一段代码需要执行很多次,为了提高编写的效率以及代码的复用,需要把这一段代码封装成一个模块,这就是函数

C 语言中函数有什么用处?
答:i是在整个程序中有效的,第7行对i赋值为3,故以输出也为3。而第9行已在复合语句之外,输出的k应为main所定义的k,此k值由第4 行已获得为5,故输出也为5。全局变量也称为外部变量,它是在函数外部定义的变量。 它不属于哪一个函数,它属于一个源程序文件。其作用域是整个源程序。在函数中使用...

C语言中的“void main()”是什么意思?
答:void main()表示函数无返回值,就是说在程序的结尾处不需要加上return 0。而return是在函数体中,用来返回特定值的。一个C程序中必须至少有一个函数,而且其中必须有一个并且仅有一个以main为名,这个函数称为主函数,主函数是整个程序的入口。