c++ 宏定义调用不定参数的函数】的更多相关文章

假设有一下函数 void Logging(int nLevel, const char* szFormat, ...); 则宏定义如下 #define LOG(FCFL) Logging##FCFL //日志对象方法 #define LOG_DEBUG(...) LOG((LEVEL_DEBUG, __VA_ARGS__)) //调试日志 然后调用该函数如下 LOG_DEBUG("%s%d", "wjshan", 8080); 输出如下…
可变参数宏定义 C99编译器标准允许你可以定义可变参数宏(variadic macros),这样你就可以使用拥有可以变化的参数表的宏.可变参数宏就像下面这个样子: #define dbgprint(...) printf(__VA_ARGS__) 缺省号代表一个可以变化的参数表.使用保留名 __VA_ARGS__ 把参数传递给宏.当宏的调用展开时,实际的参数就传递给 printf()了. 可变参数宏不被ANSI/ISO C++ 所正式支持.因此,你应当检查你的编译器,看它是否支持这项技术. 用G…
在定义可变參数的函数之前,先来理解一下函数參数的传递原理: 1.函数參数是以栈这样的数据结构来存取的,在函数參数列表中,从右至左依次入栈. 2.參数的内存存放格式:參数的内存地址存放在内存的堆栈段中,在运行函数的时候,从最后一个(最右边)參数開始入栈.因此栈底高地址,栈顶低地址,举个样例说明一下: void test(int a, float b, char c); 那么,在调用test函数的时候,实參char c先进栈,然后是float b,最后才是int a,因此在内存中变量的存放次序是c-…
// // main.c // 宏定义 #include <stdio.h> void test(); /* 预处理指令:在我们的文件翻译成0和1之前做的操作我们称之为预处理指令,一般以#号开头的(#include),包括:1.宏定义,2.条件编译,3.文件包含 */ /* 1.宏定义(会在程序翻译成0和1之前,将所有宏名替换为宏的值)的格式 1.不带参数的宏定义:#define 宏名 值 2.带参数的宏定义 宏定义在什么时候替换 源代码 --> 预处理( 宏定义替换时机) -->…
1. 构建有默认参数的函数 当我们在构建一个函数或者方法时,如果想使函数中的一个或者多个参数使可选的,并且有一个默认值,那么可以在函数定义中给参数指定一个默认值,并且放到参数列表的最后就行了.比如: def func(a, b=42): print(a, b) func(1) #a=1, b=42 func(1,2) #a=1, b=2 如果默认参数使一个可以修改的容器,比如一个列表,集合或者字典,可以使用None作为默认值.比如: #使用列表list作为默认值 def func(a, b=No…
1 宏定义在预编译的时候进行字符串替换.内联函数在编译的时候进行函数展开. 2 宏定义没有类型检查.内联函数会进行参数列表.返回值等类型检查.…
http://zhidao.baidu.com/question/125413478.html 问:#define PDEBUG(fmt,args...) fprintf(stderr,fmt, ## args) 请问这段代码什么意思? 答: 标准C只支持可变参数的函数,意味着函数的参数是不固定的,例如printf()函数的原型为: int printf( const char *format [, argument]... ); 而在GNU C中#define pr_debug(fmt,arg…
function test(s){    alert(s);}window.setTimeout(function(){test('str');},1000);这样就可以了...为什么是这样呢.因为setTimeout要求的第一个参数是函数...比如setTimeout(a_fun,1000)这样是可以的,a_fun是一个函数.但是setTimeout(a_fun(),1000);这样就不行了.因为这里a_fun()其实是函数的返回值了...这样讲应该能明白了.另外,不推荐网上有人用的方法set…
一,宏定义:在预处理的时候把宏定义的内容替换到代码中,正常编译. 1,无参数宏定义和有参数宏定义 (1)宏定义不能加分号,比如:#define  PI 3.24;错的,#define  PI 3.24对的. (2)带参数宏定义,注意参数用括号包起来,因为参数有可能表达式:宏名和形参之间不能有空格. (3)带参数宏定义和带参数的函数,在使用时候有差别的. 带参数函数示例: #include <stdio.h> int SQ(int); int main() { ; ) printf("…