易截截图软件、单文件、免安装、纯绿色、仅160KB

lua和C交互框架

1、错误(err_return)的宏定义
#define err_return(num,fmt,args)  \
    do
    {
        printf("[%s:%d]"fmt"\n",__FILE__,__LINE__,##args);return(num);
    } while(0)
-1  是return的返回值,表示有错误;
fmt 是一个字符串,用于打印错误信息;
args表示参数的个数;--这个有疑问,__FILE__,__LINE__,##args 是什么意思?
另外: while(0)是什么意思,什么条件下可以退出?
具体调用实例:err_return(-1,"luaL_newstat() failed",1);
补充解释:
//__FILE__    进行编译的源文件名
//__LINE__    文件当前有的行号(注意:是"当前")
//__DATE__    文件被编译的日期
//__TIME__    文件被编译的时间
##是字符拼接
像这样
  在#define中,标准只定义了#和##两种操作。#用来把参数转换成字符串,##则用来连接两个前后两个参数,把它们变成一个字符串。 eg.ab##cd 就是abcd, m##1 就是m1;
另外: while(0)是什么意思,什么条件下可以退出?
直接退出,0为false
0是false所以只执行一次do就退出了
while()循环进入的条件是,条件为TRUE,因为0是FALSE,所以循环一次就退出;
do~while() 循环执行一次do里面的内容然后退出,如果直接是while()循环,则不会进入循环体;
2、在lua中调用C函数:
(1)C中写好lua要调用的函数
//lua中要调用的c函数定义,实现加法
int csum(lua_State* l)    //定义函数,函数参数是lua_State* l,这也是每个lua要调用的C函数的写法;
{
    int a = lua_tointeger(l,1) ;  //lua_tointeger()获得整型返回值,一般是把lua传进去的数值(参数或者全局变量)转换成整形;
    int b = lua_tointeger(l,2) ;  //这里是指第二个参数,被转化成整形;
    lua_pushinteger(l,a+b) ;      //lua_pushinteger()这里是把返回值(a+b)压入栈
    return 1 ;                    //返回值的数量;
}
可见,lua调用C函数,首先是要写好C中的函数的,首先把函数参数转化成想要的类型,然后把返回值表达式压


相关文档:

C/C++求最大公约数和最小公倍数(转)

下面用到的方法叫辗转相除法,具做步骤如下   
    
   先用小的一个数除大的一个数,得第一个余数;   
   再用第一个余数除小的一个数,得第二个余数;   
   又用第二个余数除第一个余数,得第三个余数; &nb ......

实例解析linux内核I2C体系结构

一、概述
谈到在linux系统下编写I2C驱动,目前主要有两种方式,一种是把I2C设备当作一个普通的字符设备来处理,另一种是利用linux I2C驱动体系结构来完成。下面比较下这两种驱动。
第一种方法的好处(对应第二种方法的劣势)有:
        ●    思路比较直接,不需要 ......

【C/C++】推荐的C++书籍以及阅读顺序


当读者有一定c/c++基础
推荐的阅读顺序:
level 1
从<<essential c++>>开始,短小精悍,可以对c++能进一步了解其特性
以<<c++ primer>>作字典和课外读物,因为太厚不可能一口气看完
level 2
然后从<<effective c++>>开始转职,这是圣经,请遵守10诫,要经常看,没事就拿来翻翻 ......

每日C(3.Linux常用C函数 内存控制篇)

内存控制篇
calloc
free
getpagesize
malloc
mmap
munmap
calloc(配置内存空间)
相关函数
malloc,free,realloc,brk
表头文件
#include <stdlib.h>
定义函数
void *calloc(size_t nmemb,size_t size);
函数说明
calloc()用来配置nmemb个相邻的内存单位,每一单位的大小为size,并返回指向第 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号