我们可以预先定义一个变量,在宏定义函数中直接使用。 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdint.h> #define MACRO_ADD(a, b) \ do {\ sum = add(a, b); \ }while(0) static int32_t add(int32_t a, int32_t b) { return a + b; } int main(...
返回值类型不同:函数可以有返回值,而宏没有返回值。在函数中,可以使用return语句返回一个值,但在宏中不支持return语句。 编译器处理方式不同:函数由编译器在编译时进行编译处理,而宏是在预处理阶段进行处理。因此,编译器可以对函数进行一些优化,如内联优化等。而宏则没有这样的优化机会。 编译时错误检查不同:由于...
C/c++ 宏返回值 C语言用clang或GCC可以有解决方案,在C++中可以用以下方法,主要还是逗号运算符的原理,此方法没有在C语言中试用。 #defineNV_MALLOC(sz)(\Log_debug("NV_MALLOC--->\n file:%s\n func:%s\n line:%d\n",__FILE__,__func__,__LINE__),\malloc(sz)) 可以有多个逗号,最后一个逗号之...
int _ret; ret = (x) << 1; ret; }) int twice(int c) { return TWICE(c); }
C语言带返回值的宏 C语⾔带返回值的宏define TWICE(x) \ ({ int _ret;ret = (x) << 1;ret;})int twice(int c){ return TWICE(c);}
其作用是:将宏定义中的传入参数名转换成用一对双引号括起来参数名字符串。其只能用于有传入参数的宏定义中,且必须置于宏定义体中的参数名前。 如: #define example(instr) printf("the input string is:/t%s/n",#instr) #define example1(instr) #instr ...
但也许后来发现程序所表现的精度有变化,需要改变它的值, 这就需要修改程序中所有的相关数值,这会给我们带来一定的不便,但如果使用宏定义,使用一个标识符来代替,则在修改时只修改宏定义即可,还可以减少输入 3.1415926这样长的数值多次的情况,我们可以如此定义 #define pi 3.1415926,既减少了输入又便于修改,何乐而不...
1 新建一个使用宏定义获取两个数的最大值项目,如图所示:2 添加一个 max.c 文件,如图所示:3 包含需要用到的两个头文件,如图所示:4 输入 main() 主函数,并且添加两个参数和返回值,如图所示:5 使用define关键字,定义一个MAX()函数,该函数的功能:对两个数进行大小比较,输出大的,如图所示:6 在...
可见,使用什么样的返回值表示成功,什么用的返回值表示失败,其实只是一种人为约定。只不过,如果希望我们编写的代码能够被大多数同行愉快的使用,最好遵守下“行业潜规则”。当然了,若是希望我们的C语言代码应用性更广,则可以使用<stdlib.h>标准头文件里预先定义好的 EXIT_SUCCESS 和 EXIT_FAILURE 宏。 点个关注吧...