当前位置:首页
开发技术指南» 文章正文
    引言:
 

 

    摘要: 真是不习惯,阿拉丁很不错啊,可惜封了 ......
    摘要: //file1:p29.cpp #include<iostream> #include"d:\c++\p30.cpp" using namespace std; //--------------------------------------------------------- int am,an; static int asx,asy; //------......


关于C语言中宏使用的苦恼......(是朋友就进来坐坐,,高分相送)

各位老兄好:  
  我现在的想法是用宏定义一个不定参数的函数,  
  方法:  
  #define     deg_printf(lin)             printf   lin  
  在应用中应用:  
                      deg_printf(   ("this   is   no   %d",   n)   );  
  它等价于  
                      printf   ("this   is   no   %d",   n);  
  我现在的想法,是想把他输出到错误终端,  
  谁用好的想法??  
  不想这样:   deg_printf(   (stderr,   "this   is   no   %d",   n)   );  
   
  想这样:         err_printf(   ("this   is   no   %d",   n)   );  
   
  这个宏怎么写?大家发表意见!!!  
   
   
   
         
 

NO.1   作者: zhutr

试试这个,看看编译后的执行结果是你要求的功能吗?  
   
   
  #include   <stdio.h>  
   
  #define   errprint(err_in...)   fprintf(stderr,   err_in)  
   
  int  
  main()  
  {  
                  unsigned   char   *errmsg   =   "this   is   a   error   print   test!";  
   
                  errprint("error   =   %s\n   %d\n",   errmsg,   10);  
                  return(0);  
  }

NO.2   作者: fierygnu

可变参数宏是C99的新标准,现在可能只有gcc支持。原来的编译器只能支持两重括号的方式。

NO.3   作者: flyfreely

gcc   自己支持一种方式  
  #define   assert_msg(   msg,   args...   )   \  
  {   \  
  printf("%s:%d:MESSAGE:"#msg"\n",   \  
  __FILE__,   __LINE__,   ##args   );   \  
  }  
   
  然后C99   提供另一种方式,gcc   同样支持  
  #define   assert_msg(expr,   msg_fmt,   ...   )   \  
  if(   !(   expr   )   )   \  
  {   \  
  printf("%s:%d:ASSERT:<%s>   %s,   "   #msg_fmt   "\n",   \  
  __FILE__,   __LINE__,   __PRETTY_FUNCTION__,   \  
  "["   #expr   "]   False   "   ,   __VA_ARGS__   );   \  
  }

NO.4   作者: flyfreely

忘了说明,第一种方法:   ##args   就是可变参数  
  第二种方法,__VA_ARGS__   是可变参数,  
  参考文献:  
   
  《The   GNU   C   Library   Reference   Manual》Sandra   Loosemore   with   Richard  
  M.Stallman,   Roland   McGrath   ,Andrew   Oram,   Ulrich   Drepper   著  
   
  ISO/IEC   9899:1999   (E):   C   Standard,简称“C99”


 ·关于session 的文件清理问题    »显示摘要«
    摘要: session 的保存目录是 c:\temp 由于使用session 会在他的下面出现很多 xxxxxxxxx session 记录这类的文件, 如果用了session_destroy() 他会删除当前的文件,但是很多时候直接关闭的ie,那么这个文件就会保留,时间长了就留下很多这个无效的文件,请问,这个东西能自动清理吗? ......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE