C++ 宏 ##用法

##表示:把宏参数名与宏定义代码序列中的标识符连接在一起,形成一个新的标识符

#define test1(i) test(x##i)  

int main()
{  

    int x1=1, x2=2, x3=3;
    test1(1);              // 相当于 test(x1)
    test1(2);              // 相当于 test(x2)
    test1(3);              // 相当于 test(x3)  

    return 0;
}  

高级语言写多了,其实不推荐使用c++中的宏

http://www.waitingfy.com/archives/1763

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-25 19:14:40

C++ 宏 ##用法的相关文章

assert() 宏用法

assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义: #include <assert.h> void assert( int expression ); assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行.请看下面的程序清单badptr.c: #include <stdio.h> #include <

C++的开源跨平台日志库glog学习研究(二)--宏的使用

上一篇从整个工程上简单分析了glog,请看C++的开源跨平台日志库glog学习研究(一),这一篇对glog的实现代码入手,比如在其源码中以宏的使用最为广泛,接下来就先对各种宏的使用做一简单分析. 1. 日志输出宏 这里我们以一条最简单的日至输出为例说明: LOG(WARNING) << "This is a warning message"; 这里LOG是一个宏,其定义如下(logging.h line 487): #define LOG(severity) COMPACT

C语言随笔记(二)厉害的宏

比最牛逼的FOPEN宏更牛逼的USING_FILE宏 #define USING_FILE(file,path,type,code) \ {\ FILE *##file;\ if (NULL == (##file = fopen(path, type)))\ {\ fputs("内存不足程序退出中", stderr);\ exit(EXIT_FAILURE);\ }\ ##code;\ fclose(##file);\ } 举例 仍然处理"将worker_one.rec文件内

Atl(COM)编程如何在idl文件中使用宏定义(如#ifndefine XXX)

使用Atl进行Arcgis engine二次开发中经常会涉及到多个版本的(9.3.10.0.10.1......)develop kit,在接口声明的时候一般会把具体的接口转换成IUnknow*或者IDispatch*接口对象,而这两个对象是com通用的接口,不需要我们再自己引入:importlib("stdole2.tlb");但是如果这样操作的话就可能导致不能形象的表达出我们实际传递的对象类型,可能造成用户使用错误(毕竟用户不是我们设计人员,不能全部明白其用途),所以我们尽可能的传

C语言之预处理

1 #define name value 我再学习预处理直接的驱动力是看了php的源码,开头一大推的宏定义器,之前'掌握'的一点#define的用法太少了,根本看不懂源码中宏的处理逻辑和运行的路径.所以再学习预处理器很有必要,里面好多东西其实并不难,只是你没有接触到,等你学习了,就感觉容易了. 一.宏定义和使用中的坑 这小节采用先给代码再说明的形式,这样你可以看看每个代码的运行结果是否和你预期的一致! 宏是什么,宏就是#define机制把指定的参数替换的文本中,这样的实现方式就是宏.使用宏定义可

C基础 那些年用过的奇巧淫技

引言 - 为寻一颗明星 为要寻一颗明星 徐志摩 1924年12月1日<晨报六周年纪念增刊> 我骑著一匹拐腿的瞎马, 向著黑夜里加鞭:—— 向著黑夜里加鞭, 我跨著一匹拐腿的瞎马.// 我冲入这黑绵绵的昏夜, 为要寻一颗明星:—— 为要寻一颗明星, 我冲入这黑茫茫的荒野.// 累坏了,累坏了我胯下的牲口, 那明星还不出现:—— 那明星还不出现, 累坏了,累坏了马鞍上的身手.// 这回天上透出了水晶似的光明, 荒野里倒著一只牲口, 黑夜里躺著一具尸首.—— 这回天上透出了水晶似的光明!// { 风

学习C的到此一游小节

获取指定长度的字符串,或者说为字符串数组获取用户输入的字符 void get_str(char str[], int len) { int i=0, c; while (i<len) { c = getchar();/*这里是防止开始之前用户输入过回车,我们就跳过不处理*/ if (c == '\n') { if (!i) continue; str[i] = '\0'; break; } str[i++] = c; } if (i == len) { if (c != '\n') while 

(转)assert 断言式编程

编写代码时,我们总是会做出一些假设,断言就是用于在代码中捕捉这些假设,可以将断言看作是异常处理的一种高级形式.断言表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真.可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言,而在部署时禁用断言.同样,程序投入运行后,最终用户在遇到问题时可以重新起用断言. 使用断言可以创建更稳定,品质更好且不易于出错的代码.当需要在一个值为FALSE时中断当前操作的话,可以使用断言.单元测试必须使用断言(Junit/JunitX)除了类型检查和单

C基础 多用户分级日志库 sclog

引言 - sclog 总的设计思路 sclog在之前已经内置到simplec 简易c开发框架中一个日志库. 最近对其重新设计了一下. 减少了对外暴露的接口. 也是C开发中一个轮子. 比较简单, 非常适合学习理解,最后自己写一个自己喜欢的日志库. 首先分析分级设计的总的思路. 主要是围绕上面思路设计. 分6个等级. 2中类型的日志文件. sc.log 普通文件, 什么信息都接受, sc.log.wf只接受异常信息. 需要紧急处理的. 继续说明日志消息体的设计思路 到这里设计的总思路已经清楚了. 后