C/C++中标准宏定义及其用法

ANSI C标准中有几个标准预定义宏

  • __func__:在源代码中插入当前所在函数名;
  • __LINE__:在源代码中插入当前源代码行号;
  • __FILE__:在源文件中插入当前源文件名;
  • __DATE__:在源文件中插入当前的编译日期
  • __TIME__:在源文件中插入当前编译时间;
  • __cplusplus:编译C++程序该标识符被定义。

 前面几个(func...TIME)常用于printf/sprintf等打印语句中:

//输出日期、时间、源文件名、所在行
//Data-Time:Sep 29 2018	  11:55:19	FileName:test.cpp Line:31
printf("Data-Time:%s  %s  FileName:%s  Line:%d\n", __DATE__, __TIME__,
                                     __FILE__, __LINE__);
         

//cpp文件会被编译成c++的格式__cplusplus
//c文件只有使用gcc编译时才不会定义__cplusplus,如果使用g++编译则会定义
#ifdef __cplusplus                    
    printf("__cplusplus exist\n");    
#else                                 
    printf("__cplusplus not exist\n");
#endif                                                                                    

                                                                                            

__cplusplus常用于头文件中使用:

#ifndef _ZX_FUNC_H
#define _ZX_FUNC_H
 
#ifdef __cplusplus
extern "C" {
#endif
 
/* functions */
char *strdup (const char *s);
 
#ifdef __cplusplus
}
#endif
 

#endif

     上段代码中的strdup()函数使用C编译时,会转译成_STRDUP()标识。如果使用C++编译,C++存在多态的概念,函数会被转译中_STRDUP_CHAR()标识。因为这个不同,在C++代码中如果直接调用C编译的函数会找不到函数了,这时就需要extern “C” 了。 extern"C"会告诉C++编译器引用的函数或变量是C编译的,名字是不一样的,你要找....,问题就解决了。

在C++中调用C的代码,需要注意两点:

  • 被调用方,即C中的函数或变量声明为extern类型
  • 调用方,即C++中将函数或变量用extern "C"修饰。

启用宏

    声明宏有两种方法,一是通过#define命令,这需要修改源代码的,二是在Makefile中使用-D编译选项设置,参考下面的代码:

g++ test.cpp -o test -D __DEBUG  
//通过“-D __DEBUG”开关灵活控制启用不同的代码 
                   
#ifdef __DEBUG                                                      
    printf("in Debug\n");                                           
#elif
    printf("in Release\n");
#endif 

 

你可能感兴趣的:(C++)