C++宏定义 学过C语言的读者,对宏定义应该不陌生,同样在C++中,也可以用宏定义命令将一个指定的标识符来代表一个字符串,宏定义的作用一般是用一个短的名字代表一个长的字符串。...一般形式为: #define 标识符 字符串 定义PI的符号常量: #define PI 3.14 在C++中还可以用#define命令定义带参数的宏定义,一般形式为: #define 宏名(参数表)...字符串 比如,定义宏正方形面积Area: #define Area(long,wide) long*wide 看完之前的推文的读者,应该知道C++中增加了内置函数,比用带参数的宏定义更方便,因此在C++...中基本上已不再用#define 命令定义宏了,宏定义主要用于条件编译中。...经典案例:C++宏定义求面积,要求可以手动输入长和宽。
【注】一个 Hosted Environment 表示具有可用的标准 C 库的完整功能。 __cplusplus:当使用了 C++ 编译器时,该宏被定义。...当 __cplusplus 被定义时,其格式和 __STDC_VERSION__ 类似,只不过指示的是 C++ 语言的标准版本号。...G++ 所有内置宏定义,可以使用以下命令: g++ -dM -E -x c++ - < /dev/null 3....内置操作符宏定义 C++ 定义了 11 个操作符宏,如下表所示: 操作符 操作符宏 && and &= and_eq & bitand | bitor ~ compl ! not !...= not_eq || or |= or_eq ^ xor ^= xor_eq 如果想要在 C 语言中使用 C++ 中定义的这 11 个操作符宏,可以引入 iso646.h 头文件。
适用场景 如果 函数执行时间 小于 函数调用(参数压栈,栈帧开辟与回收,结果返回),那使用宏或者inline能减少函数执行时间。...宏定义与inline函数异同 异:宏定义就是字符替换,不做类型检查;inline反之,相当于不用执行函数调用直接执行函数体。 同:宏和Inline函数的展开发生在预处理阶段。...预处理:简言之,将头文件,宏,inline函数展开,生成.i文件。 inline函数与成员函数 编译器可能会将 类中声明并定义的成员函数 自动转化为内联函数。
新版本中会引起这类问题的更改称为重大更改,通常,修改 C++ 语言标准、函数签名或内存中的对象布局时需要进行这种更改。 ...FLT_ROUNDS 宏现在是动态的,并正确反映当前的舍入模式。 ...较旧的代码通常为宏版本的这些函数提供定义,因为它们未由 CRT 库实现,但在较新版本中则不再需要这些。...如果将 snprintf 或vsnprintf 在包括 之前定义为宏,则现在编译将因出错而失败,该错误指示定义了宏的位置。...此外,现在可定义与 timespec_get 函数连用的 TIME_UTC 宏。 这对于在任一这些方面具有冲突定义的代码而言,是一项重大更改。
参考链接: C++ vsnprintf() 尽管说define有很多不足之处,很多时候我们需要使用const来替代define, 也可以使用typedef来替代define。 ...但是,在一些实际工程中,我们还是不可避免的使用到了define,这给我们带来了极大的方便。 ...1 定义头文件,防止重复包含 其实不是真正的防止重复包含头文件,而是忽略除了第一次之外的其他包含: http://blog.csdn.net/wangshubo1989/article/details...#endif // WANGSHUBO_BASE_H_ 2 定义变量 #define WANGSHUBO_SELF_MSG WM_USER + 29 static const std::string...kDate = "2016-11-25"; 3 分平台实现 对于一些快平台开发,完全可以使用define来包含不同的文件,或是实现不同的功能: #if (MY_PLATFORM == MY_PLATFORM_WIN32
_weak __attribute__((objc_gc(weak))) #define __x86_64 1 #define __x86_64__ 1 ➜ ~ clang++ -dM -E -x c+...+ /dev/null ➜ ~ clang++ -dM -E -x c++ /dev/null #define _LP64 1 #define __APPLE_CC__ 6000 #define...+ /dev/null ➜ ~ g++ -dM -E -x c++ /dev/null #define _LP64 1 #define __APPLE_CC__ 6000 #define __...unsafe_unretained #define __weak __attribute__((objc_gc(weak))) #define __x86_64 1 #define __x86_64__ 1 任何时候,专注20%的要事...,避免80%的琐事。
但是,在一些实际工程中,我们还是不可避免的使用到了define,这给我们带来了极大的方便。...1 定义头文件,防止重复包含 其实不是真正的防止重复包含头文件,而是忽略除了第一次之外的其他包含: http://blog.csdn.net/wangshubo1989/article/details...#endif // WANGSHUBO_BASE_H_ 2 定义变量 #define WANGSHUBO_SELF_MSG WM_USER + 29 static const std::string kDate...= "2016-11-25"; 3 分平台实现 对于一些快平台开发,完全可以使用define来包含不同的文件,或是实现不同的功能: #if (MY_PLATFORM == MY_PLATFORM_WIN32...= MY_PLATFORM_WIN32) #include #include #include #endif 4 定义级别 比如打日志
文章来自 http://www.uml.org.cn/c++/200902104.asp 在将一个C源程序转换为可执行程序的过程中, 编译预处理是最初的步骤....printf(__VA_ARGS__) #endif tokens中的__VA_ARGS__被替换为函数宏定义中的"..."可变参数列表....应该避免重新定义函数宏, 不管是在预处理命令中还是C语句中, 最好对某个对象只有单一的定义. 在gcc中, 若宏出现了重定义, gcc会给出警告....(2) 在gcc中, 可在命令行中指定对象宏的定义: e.g....可参考cpp手册进一步了解#include_next 6, 预定义宏 标准C中定义了一些对象宏, 这些宏的名称以
请参阅下面的示例,其中我将交换两个变量的值。
PHP源码常用代码宏定义: #define 宏名 字符串 #表示这是一条预处理命令,所有的预处理命令都以#开头。define是预处理命令。宏名是标识符的一种,命名规则和标识符相同。...在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”。 1....在宏定义中的参数称为形式参数,在宏调用中的参数称为实际参数,这点和函数有些类似。 1....: 在宏定义中使用#用来将宏参数转换为字符串,也就是在宏参数的开头和末尾添加引号。...#define ZEND_FN(name) zif_##name 带参宏定义加连接符,会把ZEND_FN(count) 替换成 zif_count 多表达式宏定义: 在宏定义中使用了 do{ }while
Microsoft Word中对宏定义为:“宏就是能组织到一起作为一独立的命令使用的一系列word命令,它能使日常工作变得更容易”。...a + 1) ); 这里还有一个宏定义: #define DOUBLE(x) (x) + (x) 定义中我们使用了括号,想避免之前的问题,但是这个宏可能会出现新的错误。...所以输出的结果是:x=6 y=10 z=9 六、宏替换的规则 在程序中扩展#define定义符号和宏时,需要涉及几个步骤。 1....最后,再次对结果文件进行扫描,看看它是否包含任何由#define定义的符号。如果是,就重复上述处理过程。 注意: 1. 宏参数和#define 定义中可以出现其他#define定义的符号。...每次使用宏的时候,一份宏定义的代码将插入到程序中。除非宏比较短,否则可能大幅度增加程序的长度。 2. 宏是没法调试的。 3. 宏由于类型无关,也就不够严谨。 4.
1.##:用于拼接操作 实例: #include<stdio.h> #include<iostream> #define CONCAT(parm1,parm2)...
ANSI标准说明了五个预定义的宏名。...需要注意的是凡宏定义里有用"#"或"##"的地方宏参数是不会再展开....A N S I标准说明了五个预定义的宏名。...则可能仅支持以上宏名中的几个,或根本不支持。...记住编译程序 也许还提供其它预定义的宏名。 _ L I N E _及_ F I L E _宏指令在有关# l i n e的部分中已讨论,这里讨论其余的宏名。
包含vxWorks.h即可 /* 取双字节变量的高八位 */ #define MSB(x) (((x) >> 8) & 0xff) /* Most Significant Byte */ /*...取双字节变量的低八位 */ #define LSB(x) ((x) & 0xff) /* Least Significant Byte */ /* 取四字节变量的高十六位 */...#define MSW(x) (((x) >> 16) & 0xffff)/* Most Significant Word */ /* 取四字节变量的低十六位 */ #define LSW(x)...((x) & 0xffff) /* Least Significant Byte */ /* 取四字节变量的低八位 */ #define LLSB(x) ((x) & 0xff) /*...取四字节变量的次低八位 */ #define LNLSB(x) (((x) >> 8) & 0xff) /* 取四字节变量的次高八位 */ #define LNMSB(x) (((x) >> 16)
C++实验作业:动态创建三维数组,各维长度通过输入给定。...#include using namespace std; int main() { int height, row, col; //依次为三维数组的高、行、...列 cout << "请输入三维数组高,行,列 : "; cin >> height >> row >> col; int i, j, k; //动态定义三维数组 int
在一个宏定义中,编译器可以检测到绝大多数由多余符号所导致的错误。但不幸的是,编译器会将每一处使用这个宏的地方标为错误,而不会直接找到错误的根源——宏定义本身,因为宏定义已经被预处理器删除了。...它们是: __LINE__ __FILE__ __DATE__ __TIME__ __STDC__ C++中还定义了 __cplusplus 如果编译器不是标准的,则可能仅支持以上宏名中的几个...时间用字符串表示,其形式为: 分:秒 __STDC__ 宏指令的意义是编译时定义的。一般来讲,如果__STDC__已经定义,编译器将仅接受不包含任何非标准扩展的标准C/C++代码。...如果实现是标准的,则宏__STDC__含有十进制常量1。如果它含有任何其它数,则实现是非标准的。 __cplusplus 与标准c++一致的编译器把它定义为一个包含至少6为的数值。...与标准c++不一致的编译器将使用具有5位或更少的数值。
ES.32: Use ALL_CAPS for all macro names ES.32:宏定义名称全部大写 Reason(原因) Convention. Readability....区分宏定义。...如果看到小写的宏定义,尖叫!
第一部分 宏定义 宏定义的语法格式:#define ,其中的标识符就是所谓的符号常量,也称为”宏名”。预处理工作也叫宏展开。宏定义不占用内存和编译时间。...*(x):(y)) 注意在宏中需要把参数小心的用括号括起来,因为宏只是简单的文本替换,那么接下来给出一个实例来阐明刚才的说法。...然而宏定义的展开是在预处理时期,这时并没有对b进行赋值,所以展开结果是a=(b+2*b+2)=11。为了达到原来的目的,需要改变原来宏定义后半部分为((x)*(x))。...例题3:用宏定义得到一个数组所含的元素个数。...staic函数与普通函数的区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份复制品。
静态数组: int a[20]; int b[] = {1, 2, 3} 静态数组的长度为常量,在栈中分配内存空间,会自动释放。使用sizeof时,计算的是整个数组的字节大小。...动态数组: int len = 20; int *a = new int[len]; delete a; 动态数组在堆中分配内存,必须手动释放。...使用sizeof时,计算的是指针变量所占内存的字节大小。 在使用时,如果数组大小已经确定,可以使用静态数组,效率较高;如果数组大小需要在运行时确定(比如用户输入,函数参数传递等),则使用动态数组。...此外,如果需要在函数中返回数组,则必须注意用静态数组时,由于内存在栈中分配,函数执行完毕时会自动销毁,所以返回一个静态数组变量是无意义的;使用动态数组就可以返回,并在不需要时注意delete释放堆中的内存
领取专属 10元无门槛券
手把手带您无忧上云