编译器#defines for g ++ and cl

DHa*_*ick 2 g++ visual-c++

我正在编写一个跨平台的程序.有几个地方我必须指定依赖操作系统的呼叫.

#ifdef WINDOWS
..do windows only stuff
#endif
#ifdef LINUX
..do linux only stuff    
#endif
Run Code Online (Sandbox Code Playgroud)

是否有任何由编译器定义的preprocesser指令,因此在使用命令行编译器时我不必显式定义它们.即.

cl -DWINDOWS program.cpp

要么

g ++ -DLINUX program.cpp

我意识到我可以轻松编写一个makefile或者有一个自动执行此操作的shell/batch脚本.但我宁愿默认使用与编译器相同的(如果它们存在).

Kre*_*dns 5

我在这个网站上找到了所有g ++的完整列表.

  • #define __HAVE_BUILTIN_SETJMP__ 1
  • #define __unix__ 1
  • #define unix 1
  • #define __i386__ 1
  • #define __SIZE_TYPE__ unsigned int
  • #define __ELF__ 1
  • #define __GNUC_PATCHLEVEL__ 3
  • #define __linux 1
  • #define __unix 1
  • #define __linux__ 1
  • #define __USER_LABEL_PREFIX__
  • #define linux 1
  • #define __STDC_HOSTED__ 1
  • #define __EXCEPTIONS 1
  • #define __GXX_WEAK__ 1
  • #define __WCHAR_TYPE__ long int
  • #define __gnu_linux__ 1
  • #define __WINT_TYPE__ unsigned int
  • #define __GNUC__ 3
  • #define __cplusplus 1
  • #define __DEPRECATED 1
  • #define __GNUG__ 3
  • #define __GXX_ABI_VERSION 102
  • #define i386 1
  • #define __GNUC_MINOR__ 2
  • #define __STDC__ 1
  • #define __PTRDIFF_TYPE__ int
  • #define __tune_i386__ 1
  • #define __REGISTER_PREFIX__
  • #define __NO_INLINE__ 1
  • #define _GNU_SOURCE 1
  • #define __i386 1
  • #define __VERSION__ "3.2.3 20030502 (Red Hat Linux 3.2.3-47.3)"

并且Visual C++已经定义了Win32用于任何Widnows版本.