我们可以预先定义一个变量,在宏定义函数中直接使用。 #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语...
与do{...}while(0) 不同的是,({}) 不能提前退出函数宏与支持返回值。({}) 毕竟不是 while 循环,不能直接使用 break退出函数宏是比较容易理解。那支持返回值是什么意思呢? 答案是 C 语言规定 ({}) 中的最后一条语句的结果为该双括号体的返回值。例如: int main() { int a = ({ 10; 1000; })...
C语言函数可以通过返回值表示输出结果,例如 log() 函数的返回值会根据不同的输入,返回不同的值。再比如,我们定义一个函数 myopen(),用于打开某个文件,那么,这个函数要么能够成功打开文件,要么打开文件失败,这时,可以通过返回值区分“成功”和“失败”。 当然,myopen() 函数失败的原因可能很多,但不是本文关注的重...
2).连接后的实际参数名,必须为实际存在的参数名或是编译器已知的宏定义 // preprocessor_token_pasting.cpp #include <stdio.h> #define paster( n ) printf_s( "token" #n " = %d", token##n ) int token9 = 9; int main() { paster(9); ...
1 新建一个使用宏定义获取两个数的最大值项目,如图所示:2 添加一个 max.c 文件,如图所示:3 包含需要用到的两个头文件,如图所示:4 输入 main() 主函数,并且添加两个参数和返回值,如图所示:5 使用define关键字,定义一个MAX()函数,该函数的功能:对两个数进行大小比较,输出大的,如图所示:6 在...
出现这个问 题,因为它是在预处理阶段即进行了宏展开,在执行时不需要转换,即在当地执行。 3.减少代码量 有些函数在程序中经常用到,而这些函数又需要返回值,把它封装到一个函数里边还是要返回值,而用宏替换可以解决这个问题。 define中的三个特殊符号:##,#,#@ ...
2.1.3 宏的作用: 很大程度上是为了提高代码的可移植性 增强代码的可读性,例如利用宏定义常量:#define PI 3.14159 做函数功能无法完成的功能(也称之为母函数) 2.1.4 宏的几点注意: 不要在宏中使用增量和减量运算符,容易产生副作用(后述案例分析);
检查errno:在函数返回表示错误时,检查errno以获取错误类型。 处理错误:根据errno的值,采取适当的错误处理措施。 实例 下面的实例演示了 errno 宏的用法。 实例 #include<stdio.h>#include<errno.h>#include<string.h>externinterrno;intmain(){FILE*fp;fp=fopen("file.txt","r");if(fp==NULL){fprintf(std...