• C中的宏


    在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(""))) {

            fprintf(stderr, " Can't start MATLAB engine ")

            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发送出错信息。

  • 相关阅读:
    JS中关于clientWidth offsetWidth scrollWidth 等的含义
    javascript中数组concat()join()split()
    我的大数据学习路线(持续更新)
    java多线程-学习笔记
    java多线程-线程交互&互斥&同步
    java多线程-关键人物程咬金
    java多线程-军队战争
    java多线程-两个演员线程
    pytorch-Flatten操作
    龙良曲pytorch学习笔记_迁移学习
  • 原文地址:https://www.cnblogs.com/-9-8/p/7840721.html
Copyright © 2020-2023  润新知