[quote=引用 12 楼 mewiteor 的回复:] 内联相当于先把函数编译成汇编语言或机器码,再替换原代码片段。 宏相当于先用宏中的C语言代码替换原来的C语言代码,然后再编译替换后的代码。 简单的说:内联就是先编译再替换,宏就是先替换再编译。 因为内联是先编译的,所以编译内联函数时是按照函数的语法对其进行编译的。
内联相当于先把函数编译成汇编语言或机器码,再替换原代码片段。 宏相当于先用宏中的C语言代码替换原来的C语言代码,然后再编译替换后的代码。 简单的说:内联就是先编译再替换,宏就是先替换再编译。 因为内联是先编译的,所以编译内联函数时是按照函数的语法对其进行编译的。
[quote=引用 13 楼 baijiaheizhiganmao 的回复:] [quote=引用 12 楼 mewiteor 的回复:] 内联相当于先把函数编译成汇编语言或机器码,再替换原代码片段。 宏相当于先用宏中的C语言代码替换原来的C语言代码,然后再编译替换后的代码。 简单的说:内联就是先编译再替换,宏就是先替换再编译。 因为内联是先编译的,所以编译内联函数时是按照函数的语法对其进行编译的。
#include <stdio.h> #define add1(a,b) (a+b) #define add2(a,b) ((a)+(b)) int i,j; int main() { i=2;j=3; printf("%d\n",add1(i++,i*j)); i=2;j=3; printf("%d\n",add2(i++,--i*j)); return 0; }
最根本原因就是,这是C++标准强制规定的。
不存在没有二义性的宏! #include <stdio.h> #define add1(a,b) (a+b) #define add2(a,b) ((a)+(b)) int i,j; int main() { i=2;j=3; printf("%d\n",add1(i++,i*j)); i=2;j=3; printf("%d\n",add2(i++,--i*j)); return 0; }
64,642
社区成员
250,580
社区内容
加载中
试试用AI创作助手写篇文章吧