查看gcc所定义的宏的命令:cpp -dM /dev/null
命令一: cpp -dM /dev/null
命令二: gcc -dM -E - < /dev/null
1:OS MACRO:
WINDOWS: _WIN32、WIN32、_WIN64;
UNIX: unix、__unix、__unix__;
LINUX
: linux、__linux、__linux__、__gnu_linux__;
SunOS/SOLARIS: __SVR4、__svr4__、sun、__sun、__sun__、sparc、__sparc、__sparc__;
HPUX: __hppa、__hppa__、__hpux、__hpux__、_HPUX_SOURCE;
AIX: _AIX、_AIX32、_AIX41、_AIX43、_AIX51、_AIX52;
CPU: __x86_64、__x86_64__(Intel); __amd64、__amd64__(AMD); sparc、__sparc、__sparc__(Sun-SPARC);
2:Compiler MACRO:
__STDC__: ANSI C标志,值为1,说明兼容ANSI C标准;
__GNUC__: 它是gcc编译器编译代码时预定义的一个宏;需要针对gcc编写代码时,可以使用这个宏进行条件编译;__GNUC__的值表示gcc的版本号,需要针对特定版本的gcc编写代码时,也可以使用这个宏进行条件编译;__GNUC__的类型是int;
__GNUC_MINOR__: gcc的次版本号;
__GNUC_PATCHLEVEL__: gcc的修订号; 比如:gcc3.4.6版本,则__GNUC__=3;__GNUC_MINOR__=4;__GNUC_PATCHLEVEL__=6;
__GLIBC__: glib的主版本号;
__GLIBC_MINOR__: glib的次版本号;
3:常量宏:
__PRETTY_FUNCTION__: 记录当前函数的函数头信息;
__FUNCTION__: 仅记录当前函数名;
__VA_ARGS__: 保存了可变参数列表"...";
4.C/C++原文件扩展名:
.C:用C语言编写的源代码文件;
.CPP/.CXX:用C++语言编写的源代码文件;
.H/.HPP/.HXX:用C/C++语言编写的头文件;
5.main函数的四种写法:
int main(void)
int main(int argc)
int main(int argc, char** argv)
int main(int argc, char** argv, char** env)
6.VC++的版本号宏:
Visual Studio 5.0 --> VC++5.0 _MSC_VER = 1100
Visual Studio 6.0 --> VC++6.0 _MSC_VER = 1200
Visual Studio 2002 --> VC++7.0 _MSC_VER = 1300
Visual Studio 2003 --> VC++7.1 _MSC_VER = 1310
Visual Studio 2005 --> VC++8.0 _MSC_VER = 1400
Visual Studio 2008 --> VC++9.0 _MSC_VER = 1500
其他宏:
_DEBUG
当我们的工程设置为debug版编译时,编译器会定义该宏;该宏与#ifdef等
预编译语句一起进行条件编译,以区分debug和release版本功能。
ASSERT
断言,当该宏后面的语句值为0时引起程序中断,只在debug版中有效。
VERIFY
与ASSERT功能类似,在debug和release版本中均有效。
ASSERT_VALID
检查后面参数指针是否为空,只在debug版中有效。
TRACE
格式化输出字符串信息。
_ATL_VER
指明ATL的版本。
_CLR_VER
指明公共运行时(commonlanguage runtime)的版本。
_COUNTER_
一个从0开始的全局的计数器,每次用于源文件或在源文件中被引用头文件时,自动加1。
_DLL
当工程类型为动态链接库时,该值为1。
WINVER
指示Windows版本。
_MFC_VER
指示MFC版本。
_MSC_VER
指示编译器版本。
_WIN32
为Win32和Win64程序定义。
7.gcc 宏:
* __NASE_FILE__ 源文件的完整路径名,和 __FILE__ 不同,被引用的文件仍然是原来文件名 * __CHAR_UNSIGNED__ 用于指定该机器上 char 是无符号类型 * __cplusplus 使用 C++ 编译器编译 * __DATE__ 编译时的日期 * __FILE__ 编译文件名 * __func__ 同 __FUNCTION__ * __GNUC__ GCC 的主版本号 * __GNUC_MINOR__ GCC 的次版本号 * __GNUC_PATCHLEVEL__ GCC 的修订号 * __GNUG__ 由 C++ 编译程序定义 * __INCLUDE_LEVEL__ 指 #include 的层次 * __LINE__ 当前行号 * __NO_INLINE__ 不允许 inline * __OPTIMIZE__ 打开了优化选项 * __OPTIMIZE_SIZE__ 打开了对编译出文件尺寸的优化 * __STDC__ 表示该程序符合 ansi C 标准 * __STDC_HOSTED__ 表示宿主具有标准 C 的环境 * __STDC_VERSION__ 标准 C 制定时间 * __TIME__ 编译时系统时间 __VERSION__ GCC 版本号 * 预定义的宏 * __NASE_FILE__ 源文件的完整路径名,和 __FILE__ 不同,被引用的文件仍然是原来文件名 * __CHAR_UNSIGNED__ 用于指定该机器上 char 是无符号类型 * __cplusplus 使用 C++ 编译器编译 * __DATE__ 编译时的日期 * __FILE__ 编译文件名 * __func__ 同 __FUNCTION__ * __GNUC__ GCC 的主版本号 * __GNUC_MINOR__ GCC 的次版本号 * __GNUC_PATCHLEVEL__ GCC 的修订号 * __GNUG__ 由 C++ 编译程序定义 * __INCLUDE_LEVEL__ 指 #include 的层次 * __LINE__ 当前行号 * __NO_INLINE__ 不允许 inline * __OPTIMIZE__ 打开了优化选项 * __OPTIMIZE_SIZE__ 打开了对编译出文件尺寸的优化 * __STDC__ 表示该程序符合 ansi C 标准 * __STDC_HOSTED__ 表示宿主具有标准 C 的环境 * __STDC_VERSION__ 标准 C 制定时间 * __TIME__ 编译时系统时间 __VERSION__ GCC 版本号 * 预定义的宏 * __NASE_FILE__ 源文件的完整路径名,和 __FILE__ 不同,被引用的文件仍然是原来文件名 * __CHAR_UNSIGNED__ 用于指定该机器上 char 是无符号类型 * __cplusplus 使用 C++ 编译器编译 * __DATE__ 编译时的日期 * __FILE__ 编译文件名 * __func__ 同 __FUNCTION__ * __GNUC__ GCC 的主版本号 * __GNUC_MINOR__ GCC 的次版本号 * __GNUC_PATCHLEVEL__ GCC 的修订号 * __GNUG__ 由 C++ 编译程序定义 * __INCLUDE_LEVEL__ 指 #include 的层次 * __LINE__ 当前行号 * __NO_INLINE__ 不允许 inline * __OPTIMIZE__ 打开了优化选项 * __OPTIMIZE_SIZE__ 打开了对编译出文件尺寸的优化 * __STDC__ 表示该程序符合 ansi C 标准 * __STDC_HOSTED__ 表示宿主具有标准 C 的环境 * __STDC_VERSION__ 标准 C 制定时间 * __TIME__ 编译时系统时间 __VERSION__ GCC 版本号