C++中的间接宏函数】的更多相关文章

宏函数对于每个C++程序员都决不陌生,就算是初出茅庐的C++程序员也知道如何定义.使用宏函数.   但是当初学者看到类似于以下这种宏函数嵌套的时候,可能还是会比较嘀咕, #define CONVERTSTR(x) #x #define CONVERTSTR2(x) CONVERTSTR(x) 第二个宏函数所做的事情不就是再一次调用上面的宏函数吗,这难道不属于画蛇添足吗?这样做有什么意义呢?别急,我们慢慢来捋一下. 了解#和## 要想熟练的写出宏函数,了解其中的操作符必不可少,在预编译体系自定义的…
一,宏定义:在预处理的时候把宏定义的内容替换到代码中,正常编译. 1,无参数宏定义和有参数宏定义 (1)宏定义不能加分号,比如:#define  PI 3.24;错的,#define  PI 3.24对的. (2)带参数宏定义,注意参数用括号包起来,因为参数有可能表达式:宏名和形参之间不能有空格. (3)带参数宏定义和带参数的函数,在使用时候有差别的. 带参数函数示例: #include <stdio.h> int SQ(int); int main() { ; ) printf("…
环境:DW是SQLServer2008 建模工具:Cognos FrameWork Version:Cognos10.2 出现问题:在FM中创建查询主题,sql类型数据源,引入宏函数#CAMIDList()# 验证模型直接报错如下 解决办法,在#CAMIDList()# 函数外套用sq函数,如下所示 #sq(CAMIDList())# like '%u:cn='+user_id+'"%' OK问题解决 主要目的是把like前后的对象都转为字符串的值 然后进行like…
如下图在Framework的一个简单维度中加入宏函数 解决办法如下图 step1: step2: PS :Cognos 10.1.1中 在cognos connection中创建数据源,为什么没有odbc的选项,只有一种查询方式…
writesb(), writesw(), writesl() 宏函数 功能 : writesb()    I/O 上写入 8 位数据流数据 (1字节) writesw()   I/O  上写入 16 位流数据 (2字节) writesl()    I/O 上写入 32 位流数据 ( 4字节 ) 原型 : 引用 #include <asm/io.h> void   writesb (unsigned short ioaddr , void * addr , unsigned long coun…
如果*p被()包住,说明指针变量p将来指向的是函数 //声明一个指针变量 //int (*p)(int, int) = sum; int (*p)(int, int); p = sum; // 如果*p被()包住,说明指针变量p将来指向的是函数 // 最左边的void说明p指向的函数没有返回值 // 最右边的()说明p指向的函数没有形参 void (*p)(); // 函数名test就是test函数的地址 // 将test函数的地址赋值给了指针变量p // 指针变量p成功指向了test函数 p…
1.变参函数 变长参数的函数即参数个数可变.参数类型不定 的函数.最常见的例子是printf函数.scanf函数和高级语言的Format函数.在C/C++中,为了通知编译器函数的参数个数和类型可变(即是不定的.未知的),就必须以三个点结束该函数的声明. // printf函数的声明 int printf(const char * _Format, ...); //const char * _Format是格式控制,控制有多少个%d...,确定输出的个数与类型 int func(int a,int…
C(和C++)中的宏(Macro)属于编译器预处理的范畴,属于编译期概念(而非运行期概念).下面对常遇到的宏的使用问题做了简单总结. 宏使用中的常见的基础问题  #符号和##符号的使用  ...符号的使用  宏的解释方法  我们能碰到的宏的使用  宏使用中的陷阱 常见的基础性问题 一.关于#和## 在C语言的宏中,#的功能是将其后面的宏参数进行字符串化操作(Stringfication),简单说就是在对它所引用的宏变量通过替换后在其左右各加上一个双引号.比如下面代码中的宏: #define WA…
_ZTS7QObject 一.Q_D的在文件中的提法 Q_D的设置意在方便地获取私有类指针,文件为qglobal.h.下面的##是宏定义的连字符.假设类名是A,那么A##Private翻译过来就是APrivate. #define Q_D(Class) Class##Private * const d = d_func() d_func()函数如下实现: #define Q_DECLARE_PRIVATE(Class) \ inline Class##Private* d_func() { re…
转自:http://blog.sina.com.cn/s/blog_7908e1290101i97z.html 综述: OpenCV有针对矩阵操作的C语言函数. 许多其他方法提供了更加方便的C++接口,其效率与OpenCV一样. OpenCV将向量作为1维矩阵处理. 矩阵按行存储,每行有4字节的校整. //由于opencv的矩阵式一位数组或者一位指针,所以我们只能利用opencv的函数对矩阵元素进行操作(当然这样也是最安全的做法,- -!太不习惯了) 分配矩阵空间: CvMat* cvCreat…
首先看代码,我在Helloworld中添加两个函数. void HelloWorld::addTarget(){ Size visibleSize = Director::getInstance()->getVisibleSize(); auto target = Sprite::create(, , , )); int cSizeH = target->getContentSize().height; int cSizeW = target->getContentSize().widt…
    我们在VS环境中开发的时候,会遇到很多宏定义,这些宏可以应用到代码中,或用于编译.工程选项等设置,总之是我们开发中必不可少的工具,有必要做一个总结.有些宏是C/C++定义的,有些宏是VC环境预定义的.       1.C/C++中的宏          __cplusplus  如果当前编译器为C++,该值为1.     __DATE__  当前源码的编译日期,格式为Mmm dd yyyy.     __TIME__  当前源码的编译时间,格式为hh:mm:ss.     __TIMES…
在C中如何调用C++函数的问题,简单回答是将函数用extern "C"声明,当被问及如何将类内成员函数声明时,一时语塞,后来网上查了下,网上有一翻译C++之父的文章可以作为解答,遂拿来Mark一下. 将C++函数声明为``extern "C"''(在你的C++代码里做这个声明),然后调用它(在你的C或者C++代码里调用).例如: // C++ code: extern "C" void f(int); void f(int i) { // ...…
常用内存分配函数 __get_free_pages unsigned long __get_free_pages(gfp_t gfp_mask, unsigned int order) __get_free_pages函数是最原始的内存分配方式,直接从伙伴系统中获取原始页框,返 回值为第一个页框的起始地址.__get_free_pages在实现上只是封装了alloc_pages函 数, Linux培训 从代码分析,alloc_pages函数会分配长度为1< kmem_cache_alloc st…
C语言中可变参数的函数(三个点,“...”) 本文主要介绍va_start和va_end的使用及原理. 在以前的一篇帖子Format MessageBox 详解中曾使用到va_start和va_end这两个宏,但对它们也只是泛泛的了解. 介绍这两个宏之前先看一下C中传递函数的参数时的用法和原理: 1.在C中,当我们无法列出传递函数的所有实参的类型和数目时,可以用省略号指定参数表 void foo(...); void foo(parm_list,...); 这种方式和我们以前认识的不大一样,但我…
用ExecuteExcel4Macro从未打开的Excel工作簿中读取数据(转载) 从另外一个未打开的Excel文件中读取数据的函数 下面这个函数调用XLM宏从未打开的工作簿中读取数据. *注意:  该函数不能用于公式. GetValue函数,需要以下四个变量 path:  未打开的Excel文件的路径 (e.g., "d:\test")  file:  文件名(e.g., "test.xls")  sheet: 工作表的名称 (e.g., "Sheet1…
转自:http://blog.csdn.net/wzhwho/article/details/4996510 1.      原理说明 Linux内核中采用了一种同时适用于32位和64位系统的内存分页模型,对于32位系统来说,两级页表足够用了,而在x86_64系统中,用到了四级页表,如图2-1所示.四级页表分别为: l         页全局目录(Page Global Directory) l         页上级目录(Page Upper Directory) l         页中间目…
转自:http://www.netfoucs.com/article/hustyangju/70429.html readb(), readw(), readl()函数功能:从内存映射的 I/O 空间读取数据.readb  从 I/O 读取 8 位数据 ( 1 字节 ):readw 从 I/O 读取 16 位数据 ( 2 字节 ):readl 从 I/O 读取 32 位数据 ( 4 字节 ).原型:#include <asm/io.h> unsigned char readb (unsigne…
在说内联函数之前,先说说函数的调用过程. 调用某个函数实际上将程序执行顺序转移到该函数所存放在内存中某个地址,将函数的程序内容执行完后,再返回到 转去执行该函数前的地方.这种转移操作要求在转去前要保护现场并记忆执行的地址,转回后先要恢复现场,并按原来保 存地址继续执行.也就是通常说的压栈和出栈.因此,函数调用要有一定的时间和空间方面的开销.那么对于那些函数体 代码不是很大,又频繁调用的函数来说,这个时间和空间的消耗会很大. 那怎么解决这个性能消耗问题呢,这个时候需要引入内联函数了.内联函数就是在…
解决办法: 写OC的时候常常会用到各种宏定义,但是Swift中貌似没有宏的这种定义,更多的是通过全局常量或者全局函数来实现这一效果.我们只需要建立一个文件(假设为Macro.swift),把想用的定义在里面,无须导入头文件什么的,就可以在全局用啦. import UIKit import Foundation /** * 替代oc中的#define,列举一些常用宏 */ // 屏幕的物理宽度 let kScreenWidth = UIScreen.mainScreen().bounds.size…
场景:当我们在DW中新建了一个表,但是在FM中没有创建模型,想针对这个表直接做一个报表,那么就需要在reportstudio中直接用sql来查询,为了追求查询速度,我们可以把页面用户选择的条件直接传给sql. 如下图:上面是省份对应key值为1-2-3-4-5,下面是商品类型对应key值为1-2,省份选择1,5类型选择1则出现想要的数据 实现步骤: 1:从工具箱拖一个sql,每个sql会绑定一个查询接收sql的查询结果,如下图 2:指定sql引用的数据源,数据源已经在CognosConnecti…
1.      原理说明 Linux内核中采用了一种同时适用于32位和64位系统的内存分页模型,对于32位系统来说,两级页表足够用了,而在x86_64系统中,用到了四级页表,如图2-1所示.四级页表分别为: l         页全局目录(Page Global Directory) l         页上级目录(Page Upper Directory) l         页中间目录(Page Middle Directory) l         页表(Page Table) 页全局目录…
VS中添加预处理宏的方法 除了在.c及.h中添加宏定义之外,还可以采用如下方法添加宏定义: 1.若只需要定义一个宏(如#define DEBUG),可以右键点击工程-->属性-->c/c++-->预处理器-->预处理器定义,点击下拉框中的编辑,输入想要定义的宏: 2.如果还需要定义宏的内容(如#define inline __inline),可以右键点击工程-->属性-->c/c++-->命令行,在其它选项中输入如下内容: /D"inline"…
1.前言 内置函数,就是Python内部预先定义好的函数,可以直接使用,Python中内置函数有以下这么多个: 2.map() 描述: map() 会根据提供的函数对指定序列做映射.第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表. 语法: map(function, iterable, ...) 参数: function -- 函数 iterable -- 一个或多个序列 返回值: Python 2.x 返回…
0x00 宏的基本知识 // object-like #define 宏名 替换列表 换行符 //function-like #define 宏名 ([标识符列表]) 替换列表 换行符 替换列表和标识符列表都是将字符串 token 化以后的列表.区别在于标识符列表使用,作为不同参数之间的分割符.每一个参数都是一个 token 化的列表.在宏中空白符只起到分割 token 的作用,空白符的多少对于预处理器是没有意义的. 宏的一些奇技淫巧: https://gaomf.cn/2017/10/06/C…
类SAS函数的宏函数 该部分函数共5个,其无论是名字.语法.功能都与SAS函数类似,只是在函数名前多了一个“%”.这5个宏函数分别是: %INDEX %LENGTH %SCAN %SUBSTR %UPCASE 需要注意的一点是%INDEX,%SCAN这两个函数,其对应的SAS函数INDEX,SCAN:在INDEX查找指定的文本串,及SCAN中指定分隔符时,需要用引号将其内容引起来:而%INDEX,%SCAN则不需要引号.因为在宏语言中所有的东西都是文本,因此不需要用引号特别指定是文本 完成数值计…
[VS开发]C中调用C++文件中定义的function函数 标签(空格分隔): [VS开发] 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 精要一揽 C调用C++,使用extern "C"则是告诉编译器依照C的方式来编译封装接口,当然接口函数里面的C++语法还是按C++方式编译. 使用extern "C" 主要是因为C编译器编译函数时不带参数的类型信息,只包含函数的符号名字.如 int foo( float x ) C编译…
功能区按钮调用Excel.PowerPoint.Word中的VBA宏:RunMacro 众所周知,Excel.PPT.Word文档或加载宏文件中可以写很多过程和函数,调试的过程中当然可以按F8或F5直接在VBA环境中运行. 不过,当你开发完一个工具的时候,一定会想到这些过程的执行方式,普遍的做法是向工作表上放置表单控件,用户在工作表上点击按钮来执行宏. 另外的方式,就是利用CustomUI技术,制作一个扩展名为xlam的加载宏文件,通过Ribbon中的按钮来调用VBA宏.这种方式虽然美观了,但是…
Excel VBA中,同一个应用程序下面包括多个工作簿,每个工作簿都有自己独立的VBAProject 在同一个VBA工程中,使用Call即可调用其他模块中的过程和函数,例如: Call Module2.Proc2 要注意:Call后面必须书写模块名或过程名,而不是双引号包起来的字符串. 当然也可以使用Excel的Application.Run “Module2.Proc2”调用另一个模块中的过程. 如果要调用另一个VBA工程中的过程和函数,Call就不好使了,需要使用Run,只不过要在模块前面加…
为什么要EventLoop? JS 作为浏览器脚本语言,为了避免复杂的同步问题(例如用户操作事件以及操作DOM),这就决定了被设计成单线程语言,而且也将会一直保持是单线程的.而在单线程中若是遇到了耗时的操作(IO,定时器,网络请求)将会一直等待,CPU利用率将会大打折扣,时间大量浪费.所以需要设计一种方案让一些耗时的操作放在一边等待,让后面的函数先执行,于是有了EventLoop的设计. 将任务分为两种: 同步任务 异步任务 定时器都是异步操作 事件绑定都是异步操作 AJAX中一般采取的异步操作…