1 , 在C语言怎样对数据和操作的封装以下仅为个人理解:数据封装就是使用类似结构体的形式,将多个相关数据合并到一个结构体中,在程序中作为一个整体进行付值和调用操作 。操作封装就是对多个重复使用且具有相同功能的语句进行整合,打包成一个实现固定功能的函数 。连接数据库用标准sql语句就可以了
2 , c语言如何实现函数的调用如何调用C语言写的库,如a.lib等,有对应的库头文件a.h 。假设a.h中定义了函数:int WhyCoding(int a, float b);做法是,/* cpp_a.h */extern "C" #include "a.h"}或/* cpp_a.h */extern "C" int WhyCoding(int a, float b); /* 重定义所有的C函数 */}从上面可以看出,extern "C" 是用在C和C++之间的桥梁 。之所以需要这个桥梁是因为C编译器编译函数时不带函数的类型信息,只包含函数符号名字,如C编译器把函数int a(float x)编译成类似_a这样的符号,C连接器只要找到了调用函数的符号,就可以连接成功,它假设参数类型信息是正确的,这是C编译连接器的缺点 。而C++编译器为了实现函数重载,编译时会带上函数的类型信息,如他把上面的a函数可能编译成_a_float这样的符号为了实现重载,注意它还是没有带返回值得信息,这也是为什么C++不支持采用函数返回值来区别函数重载的原因之一,当然,函数的使用者对函数返回值的处理方式(如忽略)也是重要原因 。基于以上,C调用C++,首先需要用封装函数把对C++的类等的调用封装成C函数以便C调用,于是extern "C" 的作用是:让编译器知道这件事,然后以C语言的方式编译和连接封装函数.(通常是把封装函数用C++编译器按C++方式编译 , 用了extern "C" 后,编译器便依C的方式编译封装接口 , 当然接口函数里面的C++语法还是按C++方式编译;对于C语言部分--调用者 , 还是按C语言编译;分别对C++接口部分和C部分编译后,再连接就可以实现C调用C++了).相反,C++调用C函数,extern "C" 的作用是:让C++连接器找调用函数的符号时采用C的方式,即使用_a而不是_a_float来找调用函数 。函数名加(实参),这样吧...举个例子你看一下...int add(int x,int y)int x,y;int z;z=x+y;return z;}//定义一个z=x+y的函数int main()//主函数int a=10,b=20;int m;m=add(a,b);//这句就是函数的调用...调用了add函数printf("%d",m);return m;}理解了没...还没的话...仔细看下教材...这个问题很容易解决的...本次课程主要讲解vs13下如何使用输出函数printf,以及相关的格式输出说明符的调用,对于不是计算机专业想要学编程的学生来说,是一个很好的基础教程,希望大家可以认真跟我一起从0基础开始学开发!void My()void main(){ My();}
3,c语言如何封装一个带有可变参数的方法是指用二级指针么?一般动态的比较少用多维 。如果二级指针的就是这样:template t** createarray(int ndim1, int ndim2)t** ppary = new t*[ndim1];for (int i = 0; i < ndim1; i++)ppary[i] = new t[ndim2];return ppary;}应用:int**ppintary = createarray(3, 5);需要借用C语言的VA_LIST 宏定义 , 及相关操作来实现可变参数 。VA_LIST 所在头文件:#include <stdarg.h>,用法如下:(1)首先在函数里定义一具VA_LIST型的变量,这个变量是指向参数的指针;(2)然后用VA_START宏初始化刚定义的VA_LIST变量;(3)然后用VA_ARG返回可变的参数,VA_ARG的第二个参数是你要返回的参数的类型(如果函数有多个可变参数的,依次调用VA_ARG获取各个参数);(4)最后用VA_END宏结束可变参数的获取 。以下是一个自定义打印接口的实现:int my_printf(const char *fmt, ...)//...表示参数可变 va_list args;//定义va_list static char gc_PrintfOutBuff[1000]; va_start(args, fmt);//初始化 vsnprintf((char *) gc_PrintfOutBuff, 1000, (char *) fmt, args);//这里没有使用VA_ARG取回单个变量 , 而是借用vsnprinf一次性读取 。va_end(args);//结束获取 puts("%s",(const char *)gc_PrintfOutBuff);//使用 。return 0;}第一,C里没有方法,只有函数第二,可以使用vsprintf来代替sprintfhttp://baike.baidu.com/link?url=iD6CyTxyVttKGstaTFti-mRkgMvPwZFQ2zqjotAKXqlYAOashNKItRiL_OpPCvkwfBvRA73ckXhztVzENgK-l_因为va_start, va_arg, va_end等定义成宏,所以它显得很愚蠢, 可变参数的类型和个数完全在该函数中由程序代码控制 , 它并不能智能地识别不同参数的个数和类型 。有人会问:那么printf中不是实现了智能识别参数吗?那是因为函数printf()是从固定参数format字符串来分析出参数的类型,再调用va_arg的来获取可变参数的 。也就是说 , 你想实现智能识别可变参数的话是要通过在自己的程序里作判断来实现的 。另外有一个问题,因为编译器对可变参数的函数的原型检查不够严格,对编程查错不利 。如果simple_va_fun()改为:【c语言函数封装与调用,在C语言怎样对数据和操作的封装】
- 分析家c语言接口
- iostream常用函数,includeclass Apublic Aint iint ja1i a2jvirtual
- mysqli获取所有数据 mysql的提取函数
- C语言中的d,c语言d什么意思
- oracle分析函数做预测
- c链表的直接排序分析
- 函数型数据分析代码,数据分析excel常用的函数
- mysql 分组函数 mysql分组取数据
- idea怎么切换语言,intellij idea 1415 怎样设置中文
- c语言的ide工具,开发C语言程序的IDE主要集成了哪些工具
