TARGET_IPHONE_SIMULATOR:IOS模拟器 TARGET_OS_IPHONE:IOS设备 TARGET_OS_MAC:MAC系统 3)__ANDRIOD__,安卓系统 4)__linux__,linux系统 5)__unix__,所有unix系统 6)_POSIX_VERSION,符合POSIX标准的系统 其他标准还有__FreeBSD__等. 区分不同编译器及其版本 1)MSVC:Microsoft Visual C++编译器 _MSC_VER:不...
不设置没法用。 但是,我敢肯定各种编译器 内置一些宏,比如 MS VC的cl.exe ,LINUX的GNU gcc,在各个平台都会有不同的内置宏的。 所以 如果我搜索 "各个编译器 内置宏 操作系统" 少量的答案中 有一个 : C++:编写跨平台程序的关键,C/C++中的内置宏定义 分两部分: 操作系统判定: Windows: WIN32 Linux: linu...
我们分别用2个宏,第一个宏用来区分是开发者还是使用者,第二个宏来区分是静态库还是动态库。 以GameMachine为例: gamemachine和gamemachine_static分别是dll和lib库(开发者),gamemachinedemo和gamemachinedemo_dll分别是用了gamemachine和gamemachine_static的exe程序(使用者)。 gamemachine工程定义了GM_DLL宏,表示它...
int:占用4个字节 最高位为符号位 long:区分系统!//32位操作系统占用4个字节 最高位为符号位 //64位操作系统 占用8个字节 最高位为符号位 long long:占用8个字节 最高位为符号位 不带符号 unsigned short:占用2个字节,无符号 unsigned int:占用4个字节,无符号 unsigned long:区分系统!//32位操作系统 占...
当然,最好的方式是自己实现格式化特定类型的数据,可以显著的提高日志系统的吞吐量,下一篇文章再说说这部分代码。 2.可变参数 大家都知道,printf函数就是通过可变参数机制来实现的。 可变参数可以这样定义和使用: (1)不带参数名 (2)带参数名 第20行代码用 __VA_ARGS__ 来代表宏定义参数中的三个点(...),也...
1. 简单宏定义 简单的宏定义有如下格式: [#define指令(简单的宏)] #define 标识符替换列表 替换列表是一系列的C语言记号,包括标识符、关键字、数、字符常量、字符串字面量、运算符和标点符号。当预处理器遇到一个宏定义时,会做一个 “标识符”代表“替换列表”的记录。在文件后面的内容中,不管标识符在任何位...
但,你把C语言的其它元素,比如非函数类型定义(结构体,枚举等)放入extern "C"内部,也不会带来任何影响。更不用说宏定义预处理指令了。 所以,如果你更加看重良好组织和管理的习惯,你应该只在必须使用extern "C"声明的地方使用它。即使你比较懒惰,绝大多数情况下,把一个头件自身的所有定义和声明都放置在extern"C"...
图形Api 一般分为了两个非常不同阵营。 有知名的例子,包括 Direct2D 和 Direct3D 的即时模式 Api。 然后还有Windows Presentation Foundation(WPF) 等保留模式 Api 或任何 XAML 或声明式的 API。 现代的浏览器提供明确区分的两个图形模式,提供一个保留模式 API 和提供即时模式 API 的...
通常在C编译系统对程序进行编译前,先对程序中一些特殊的命令进行“预处理”,然后将预处理的结果和源程序一起进行编译处理,得到目标代码, 以“#”开始的行成为预处理指令。 带参数的宏与函数非常类似,在引用函数时也是在函数名后的括号 内写实参,且要求实参的数目等于形参的数目,但它们还是有区别的: ...
但,你把C语言的其它元素,比如非函数类型定义(结构体,枚举等)放入extern "C"内部,也不会带来任何影响。更不用说宏定义预处理指令了。 所以,如果你更加看重良好组织和管理的习惯,你应该只在必须使用extern "C"声明的地方使用它。即使你比较懒惰,绝大多数情况下,把一个头件自身的所有定义和声明都放置在extern"C"...