C中的宏

本文深入探讨了C语言中的高级特性,包括可变参数宏定义、预编译命令的使用、main函数参数详解、assert断言函数的作用及调用matlab引擎的方法。同时对比了extern与EXPORT_SYMBOL的区别,并解释了static修饰符的含义。

在GUN C中,是支持可变数目的参数的。通常使用...来表示可变个数的参数:

  void printf(const char* format, ....);

 

在define的预编译命令中,也支持这种可变参数的宏定义;

  #define debug(...) printf(__VA_ARGS__)

  使用保留名__VA_ARGS__来将参数传递给宏。

  #define dgbmsg(fmt, ...)   printf(fmt, ##__VA_ARGS__)

  #define dbgmsg(fmt,...)    printf("%s:%s:%05d", __FILE__,__FUNCTION__,__LINE__,##__VA_ARGS_)

 

C中的define  ##起连接作用,相当于变量拼接的意思

        #表示变量替换的意思;

  #define paster(n) printf("token" #n "=%0d", token##n);

  paster(9)被翻译为   printf("token" "9" "= %0d", token9)

 

C中的main函数,可以使用两个默认的参数,

argc,argument count,表示传入main函数的参数个数;

argv,argument vector,表示传入main函数的参数序列或者指针,第一个参数arg[0]表示程序的名称,包含着程序的完整路径,

            arg[0]表示传入的第一个真正的参数。

  void  main(int argc,char *argv[])

  argv是指向指针的指针,也可以写成char **argv,

 

C语言中是不支持函数参数中有默认值的,函数中参数的默认值feature是在C++中才支持的。

 

C中调用matlab。

有两种方法,1)在c中import matlab的引擎,2)在c中使用matlab编译产生的dll文件,(linux下没法使用)

在C中调用matlab引擎,

首先,引入相应的头文件, #include "engine.h"

   添加库文件,#pragma comment(lib, "libeng.lib")

            #pragma comment(lib, "libmx.lib")

            #pragma comment(lib, "libmat.lib")

   定义引擎,Engine *ep;

   打开引擎,if(!(ep = engOpen("\0"))) {

        fprintf(stderr, "\nCan't start MATLAB engine\n")

        return EXIT_FAILURE

    }

   matlab变量格式创建,一般通过,mxCreateDoubleMatrix和memcpy函数。

     使用engPutVariable来将数据传递给matlab引擎。

   调用engEvalString执行命令,将matlab命令作为参数,利用matlab引擎进行计算。

   数据清理,mxDestroyArray清除由mxCreateDoubleMatrix产生的变量,

      最后使用engClose来关闭引擎。

 

 

extern和EXPORT_SYMBOL,作用类似,都是让被修饰的函数被其他文件中的函数调用;

  1) EXPORT_SYMBOL,一般用在linux kernel中,通过宏可以将该函数的入口放在__ksymtab section中,

    这样在runtime动态加载的时候,可以从ksymtab的section中解析出该函数;

  2) extern,普通程序经常使用的外部函数类型声明,在编译的时候,被静态的链接调用。

 

而static修饰的静态函数,表示都是内部函数,不能被外部调用。与上边的两个用途相反。

 

C/C++中的assert函数原型定义在

 #include <assert.h>

    void assert( int expression );

用户只要在用户头文件中添加assert.h即可使用,用来判断expression的异常值,出错的情况下,向stderr发送出错信息。

转载于:https://www.cnblogs.com/-9-8/p/7840721.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值