zoukankan      html  css  js  c++  java
  • Linux C 中连接操作符##

    #include <stdio.h>
    #define test(x) test ## x
    #define DPRINT( fmt, args...) \
    { 	\
    	printf("File : %s Funtion : %s Line : %d  \t", __FILE__, __FUNCTION__, __LINE__ );\
    	printf( fmt, ##args );\
    }
    
    void test1(int a)
    {
    	DPRINT("Integer : %d \n", a);
    }
    
    void test2(char *s)
    {
    	DPRINT("String : %s \n", s);
    }
    
    int main(void)
    {
    	test(1)(100);
    	test(2)("hello");
    	return 0;
    }
    

    打印信息:

    ***************************************************

     File : test.c Funtion : test1 Line : 11         Integer : 100
     File : test.c Funtion : test2 Line : 16         String : hello

    ***************************************************

    #define DPRINT( fmt, args...) \
    { \
    printf("File : %s Funtion : %s Line : %d  \t", __FILE__, __FUNCTION__, __LINE__ );\
    printf( fmt, ##args );\
    }

    这样定义宏有个问题, 标准printf()函数有返回值, 只是我们很少用

    另外一种定义:

    #define DPRINT( fmt, args...)     \
      printf("File : %s Funtion : %s Line : %d  \t"fmt, __FILE__, __FUNCTION__, __LINE__ ,##args )

    fmt不能为指针

    *****************************************

    const  char *s= "string";

    printf(s);

    *****************************************

    是合法的,可以打印出string

    但DPRINT(s)就不合法

  • 相关阅读:
    nyoj 228士兵杀敌(五)
    hdu2072 单词数
    nyoj123士兵杀敌(四)(树状数组)
    nyoj1092数字分隔(二)
    HDU1166:敌兵布阵(线段树单点更新,区间查询)
    nyoj269VF(dp)
    nyoj 860又见01背包(01背包)
    poj2184(01背包变形)
    HDU2159FATE(完全背包变形)
    HDU4508 完全背包
  • 原文地址:https://www.cnblogs.com/Neddy/p/2335399.html
Copyright © 2011-2022 走看看