-
2017-07-23 22:09:49
define 中若有常量会直接计算然后预编译时替换,如果有变量的话只会简单替换
如下测试程序#include<stdio.h> char arry1[]={1,11}; char arry2[]={2,22}; #define SWITCH_ARRY(X) ((X==0)?arry1:arry2) void display_arry(int id) { printf("frist elem is %d\n",SWITCH_ARRY(id)[0]); } void display_arry2(int id) { char *p; p=SWITCH_ARRY(id); printf("frist elem is %d\n",p[1]); } #define SWITCH_FUNC(X)((X==0)?display_arry:display_arry2) typedef void (*myfunc)(int id); myfunc fff1={display_arry,display_arry2}; myfunc fff2={display_arry2,display_arry}; #define SWITCH_FUNC_ARRY(X) ((X==0)?fff1:fff2) int main(int argc,char *argv[]) { int id=(argv[1][0]-'0'); int id2=0; printf("id=%d\n",id); id2=SWITCH_ARRY(id)[id];//可以这么用 printf("id2=%d\n",id2); SWITCH_FUNC(id)[id]; SWITCH_FUNC_ARRY(id)[id](id);//还可以这么用 return 0; }
使用gcc -E define.c -o a.i
得到的预编译后的文件int main(int argc,char *argv[]) { int id=(argv[1][0]-'0'); int id2=0; printf("id=%d\n",id); id2=((id==0)?arry1:arry2)[id];//可以这么用 printf("id2=%d\n",id2); ((id==0)?display_arry:display_arry2)(id); ((id==0)?fff1:fff2)[id](id);//还可以这么用 return 0; }
gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3)
gcc default.c
./a.out 1
shell结果:
id=1
id2=2
second elem is 22
first elem is 2更多相关内容 -
C语言 define 定义函数 - C语言零基础入门教程
2021-09-04 09:22:07二.define 定义函数 1.define 定义不带参数的函数 2.define 定义带参数的函数 三.define 定义函数陷阱 1.define 函数陷阱一 2.define 函数陷阱一解决办法 3.define 函数陷阱二 4.define 函数陷阱二解决办法 四...目录
零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门
一.define 简介
C
语言中,除了可以用#define
定义一个标识符来表示一个常量,还可以用#define
定义函数,例如://定义常量 #define MAX_VALUE 100 //定义整型变量MAX_VALUE值为100 #define USER_NAME "huge" //定义字符串变量USER_NAME值为"huge" #define PI 3.1415926 //定义浮点数变量PI值为3.1415926 //定义函数 #define MAX(a,b) (a>b)?a:b //取两个数最大值 #define MIN(a,b) (a<b)?a:b //取两个数最小值
凡是以
#
开头的均为预处理指令,预处理又叫预编译。预编译不是编译,而是编译前的处理。这个操作是在正式编译之前由系统自动完成的。二.define 定义函数
1.define 定义不带参数的函数
/******************************************************************************************/ //@Author:猿说编程 //@Blog(个人博客地址): www.codersrc.com //@File:C语言教程 - C语言 define定义函数 //@Time:2021/06/27 08:00 //@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累! /******************************************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string> #define RESULT (x*2+5) int main() { int x = 10; printf("RESULT是:%d\n",RESULT); return 0; } /* RESULT是:25 */
2.define 定义带参数的函数
/******************************************************************************************/ //@Author:猿说编程 //@Blog(个人博客地址): www.codersrc.com //@File:C语言教程 - C语言 define定义函数 //@Time:2021/06/27 08:00 //@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累! /******************************************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string> #define MAX(a,b) (a>b)?a:b //取两个数最大值 #define MIN(a,b) (a<b)?a:b //取两个数最小值 int main() { printf("最大值是:%d\n",MAX(5,100)); printf("最小值是:%d\n",MIN(5,100)); return 0; } /* 最大值是:100 最小值是:5 */
三.define 定义函数陷阱
1.define 函数陷阱一
/******************************************************************************************/ //@Author:猿说编程 //@Blog(个人博客地址): www.codersrc.com //@File:C语言教程 - C语言 define定义函数 //@Time:2021/06/27 08:00 //@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累! /******************************************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string> #define RESULT(x) x*x int main() { printf("RESULT是:%d\n",RESULT(2)); printf("RESULT是:%d\n",RESULT(2+1)); return 0; } /* RESULT是:4 RESULT是:5 */
很蒙蔽??为什么第二个计算结果不是
9
,而是5
??#define RESULT(x) x*x RESULT(2) 等价 2*2 = 4 RESULT(2+1) 等价 2+1*2+1 = 5
2.define 函数陷阱一解决办法
/******************************************************************************************/ //@Author:猿说编程 //@Blog(个人博客地址): www.codersrc.com //@File:C语言教程 - C语言 define定义函数 //@Time:2021/06/27 08:00 //@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累! /******************************************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string> #define RESULT(x) (x)*(x) //在参数两侧加括号 int main() { printf("RESULT是:%d\n",RESULT(2)); printf("RESULT是:%d\n",RESULT(2+1)); //等价 (2+1)*(2+1) = 9 return 0; } /* RESULT是:4 RESULT是:9 */
3.define 函数陷阱二
/******************************************************************************************/ //@Author:猿说编程 //@Blog(个人博客地址): www.codersrc.com //@File:C语言教程 - C语言 define定义函数 //@Time:2021/06/27 08:00 //@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累! /******************************************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string> #define RESULT(x) (x)*(x) int main() { printf("RESULT是:%d\n",RESULT(2)); printf("RESULT是:%d\n",9/RESULT(2+1)); return 0; } /* RESULT是:4 RESULT是:9 */
很蒙蔽??为什么第二个计算结果不是
1
,而是9
??#define RESULT(x) x*x RESULT(2) 等价 2*2 = 4 9/RESULT(2+1) 等价 9/(2+1)*(2+1) = 5
4.define 函数陷阱二解决办法
/******************************************************************************************/ //@Author:猿说编程 //@Blog(个人博客地址): www.codersrc.com //@File:C语言教程 - C语言 define定义函数 //@Time:2021/06/27 08:00 //@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累! /******************************************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string> #define RESULT(x) ((x)*(x)) //在参数两侧加括号,整个表达式也需要加上括号 int main() { printf("RESULT是:%d\n",RESULT(2)); printf("RESULT是:%d\n",9/RESULT(2+1)); return 0; } /* RESULT是:4 RESULT是:1 */
以上讨论说明,对于宏定义,保险的做法是不仅应在参数两侧加括号,也应在整个字符串外加括号。
四.猜你喜欢
- C 语言 数组下标越界和内存溢出区别
- C 语言 指针声明和定义
- C 语言 指针 p++ / p–
- C 语言 p++/§++/_(p++)/_p++
- C 语言 使用指针遍历数组
- C 语言 指针和数组区别
- C 语言 指针数组和数组指针区别
- C 语言 空指针 NULL
- C 语言 void 指针
- C 语言 野指针
- C 语言 函数值传递和址传递
- C 语言 函数缺省参数
- C 语言 函数不定长参数
- C 语言 函数指针
- C 语言 指针函数
- C 语言 回调函数 callback
- C 语言 typedef
- C 语言 define 定义常量
- C 语言 define 防止头文件重复包含
- C 语言 define 定义函数
未经允许不得转载:猿说编程 » C 语言 define 定义函数
-
C语言 define 定义函数(多行书写) - C语言零基础入门教程
2021-09-05 08:32:41目录 ...C 语言中,除了可以用 #define 定义一个标识符来表示一个常量,还可以用 #define 定义函数,例如: //定义常量 #define MAX_VALUE 100 //定义整型变量MAX_VALUE值为100 #define USER_NAME "hug目录
零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门
一.define 简介
C
语言中,除了可以用#define
定义一个标识符来表示一个常量,还可以用#define
定义函数,例如://定义常量 #define MAX_VALUE 100 //定义整型变量MAX_VALUE值为100 #define USER_NAME "huge" //定义字符串变量USER_NAME值为"huge" #define PI 3.1415926 //定义浮点数变量PI值为3.1415926 //定义简单函数 #define MAX(a,b) (a>b)?a:b //取两个数最大值 #define MIN(a,b) (a<b)?a:b //取两个数最小值 //定义复杂多行的函数 #define MACRO(arg1, arg2) do { \ \ stmt1; \ stmt2; \ \ } while(0) 关键是要在每一个换行的时候加上一个 "\ "
凡是以
#
开头的均为预处理指令,预处理又叫预编译。预编译不是编译,而是编译前的处理。这个操作是在正式编译之前由系统自动完成的。使用
define
定义一个多行的复杂函数,关键是要在每一个换行的时候加上一个\
;二.define 定义多行函数
1.简单使用
/******************************************************************************************/ //@Author:猿说编程 //@Blog(个人博客地址): www.codersrc.com //@File:C语言教程 - C语言 define 定义函数(多行书写) //@Time:2021/06/27 08:00 //@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累! /******************************************************************************************/ #include "stdafx.h" #include <stdio.h> //单行书写 //#define swap(x,y) do{x=x+y;y=x-y;x=x-y;}while(0) //多行书写 #define swap1(x,y) \ do{\ x=x+y;\ y=x-y;\ x=x-y;\ }while(0) int main() { int a = 2, b = 3; printf("交换前a=%d\t,b=%d\n", a, b); swap1(a, b); printf("交换后a=%d\t,b=%d\n\n", a, b); return(0); } /* 交换前a=2 ,b=3 交换后a=3 ,b=2 */
2.经典案例
/* 需求: 1.debug模式下: a.如果定义了宏DEBUG_TO_FILE,那么将日志输出到文件 b.如果定义了宏DEBUG_TO_FILE,那么将日志输出到控制台 2.release模式下不打印任何日志 */ /******************************************************************************************/ //@Author:猿说编程 //@Blog(个人博客地址): www.codersrc.com //@File:C语言教程 - C语言 define 定义函数(多行书写) //@Time:2021/06/27 08:00 //@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累! /******************************************************************************************/ #include <stdio.h> #include <string.h> //开启下面的宏表示程序运行在调试版本, 否则为发行版本, 这里假设只有调试版本才输出调试信息 #define _DEBUG #ifdef _DEBUG //开启下面的宏就把调试信息输出到文件,注释即输出到终端 #define DEBUG_TO_FILE #ifdef DEBUG_TO_FILE //调试信息输出到以下文件 #define DEBUG_FILE "/tmp/debugmsg" //调试信息的缓冲长度 #define DEBUG_BUFFER_MAX 4096 //将调试信息输出到文件中 #define printDebugMsg(moduleName, format, ...) {\ char buffer[DEBUG_BUFFER_MAX+1]={0};\ snprintf( buffer, DEBUG_BUFFER_MAX \ , "[%s] "format" File:%s, Line:%d\n", moduleName, ##__VA_ARGS__, __FILE__, __LINE__ );\ FILE* fd = fopen(DEBUG_FILE, "a");\ if ( fd != NULL ) {\ fwrite( buffer, strlen(buffer), 1, fd );\ fflush( fd );\ fclose( fd );\ }\ } #else //将调试信息输出到终端 #define printDebugMsg(moduleName, format, ...) \ printf( "[%s] "format" File:%s, Line:%d\n", moduleName, ##__VA_ARGS__, __FILE__, __LINE__ ); #endif //end for #ifdef DEBUG_TO_FILE #else //发行版本,什么也不做 #define printDebugMsg(moduleName, format, ...) #endif //end for #ifdef _DEBUG int main(int argc, char** argv) { printDebugMsg( "www.codersrc.com", "name = %s", "C语言教程" ); return 0; }
三.猜你喜欢
- C 语言 数组下标越界和内存溢出区别
- C 语言 指针声明和定义
- C 语言 指针 p++ / p–
- C 语言 p++/§++/_(p++)/_p++
- C 语言 使用指针遍历数组
- C 语言 指针和数组区别
- C 语言 指针数组和数组指针区别
- C 语言 空指针 NULL
- C 语言 void 指针
- C 语言 野指针
- C 语言 函数值传递和址传递
- C 语言 函数缺省参数
- C 语言 函数不定长参数
- C 语言 函数指针
- C 语言 指针函数
- C 语言 回调函数 callback
- C 语言 typedef
- C 语言 define 定义常量
- C 语言 define 防止头文件重复包含
- C 语言 define 定义函数
- C 语言 define 定义函数(多行书写)
未经允许不得转载:猿说编程 » C 语言 define 定义函数(多行书写)
-
C语言 | 预处理 | 宏定义 | #define | 定义函数
2020-06-21 16:31:15文章目录预处理预处理运算符宏定义无参宏定义带参宏定义宏定义-定义函数 此文主要介绍宏定义,并在介绍宏定义时举例介绍预处理命令 预处理 参考:C 预处理器 | 菜鸟教程 重要的预处理器指令如下: 指令 描述 ...
此文主要介绍宏定义,并在介绍宏定义时举例介绍预处理命令预处理
参考:C 预处理器 | 菜鸟教程
重要的预处理器指令如下:指令 描述 #define 定义宏 #include 包含一个源代码文件 #undef 取消已定义的宏 #ifdef 如果宏已经定义,则返回真 #ifndef 如果宏没有定义,则返回真 #if 如果给定条件为真,则编译下面代码 #else #if 的替代方案 #elif 如果前面的 #if 给定条件不为真,当前条件为真,则编译下面代码 #endif 结束一个 #if……#else 条件编译块 #error 当遇到标准错误时,输出错误消息 #pragma 使用标准化方法,向编译器发布特殊的命令到编译器中 预处理运算符
符号 描述 \ 宏延续运算符。一个宏通常写在一个单行上。但是如果宏太长,一个单行容纳不下,则使用宏延续运算符(\) # 字符串常量化运算符。在宏定义中,当需要把一个宏的参数转换为字符串常量时,则使用字符串常量化运算符(#)。 ## 标记粘贴运算符。宏定义内的标记粘贴运算符(##)会合并两个参数。 defined 预处理器 defined 运算符是用在常量表达式中的,用来确定一个标识符是否已经使用 #define 定义过。 宏定义
define,宏定义,C语言中预处理命令一种。分为无参宏定义和带参宏定义。
无参宏定义的一般形式为:
#define 宏名 字符串
带参宏定义的一般形式为:#define 宏名(参数表) 字符串
无参宏定义
C语言中无参宏定义的一般形式为:
#define 宏名 字符串
- 使用
#undef 宏名
取消已定义的宏
#define MESSAGE "Hello World!" printf("%s\n",MESSAGE); #undef MESSAGE
- 如果MESSAGE没有定义,则定义MESSAGE为10000
#ifndef MESSAGE #define MESSAGE 10000 #endif printf("%d\n",MESSAGE);
带参宏定义
带参宏定义的一般形式为:
#define 宏名(形参表)字符串
- 如果MESSAGE没有定义,执行语句1;否则,执行语句2
#define MAX(a,b) a>b?a:b #if !defined(MESSAGE) #define MESSAGE 10000 #else printf("%d\n",MAX(1,10)); #endif
- 如果if判断为真,则执行语句
bool flag=true; #define PRINT(section) if(flag){\ printf("%s\n",section);\ } PRINT("hello world!");
宏定义-定义函数
可以通过宏定义少写很多代码,大家可以看下面一串代码
#define _CONFIG_MAKE_PROTOTYPE(fname,type) type cfg_get##fname(const char *name,const type def) _CONFIG_MAKE_PROTOTYPE(str,char*); _CONFIG_MAKE_PROTOTYPE(num,int); _CONFIG_MAKE_PROTOTYPE(uint8,uint8_t); _CONFIG_MAKE_PROTOTYPE(int8,int8_t); _CONFIG_MAKE_PROTOTYPE(uint16,uint16_t); _CONFIG_MAKE_PROTOTYPE(int16,int16_t); _CONFIG_MAKE_PROTOTYPE(uint32,uint32_t); _CONFIG_MAKE_PROTOTYPE(int32,int32_t); _CONFIG_MAKE_PROTOTYPE(uint64,uint64_t); _CONFIG_MAKE_PROTOTYPE(int64,int64_t); _CONFIG_MAKE_PROTOTYPE(double,double);
以
_CONFIG_MAKE_PROTOTYPE(str,char*);
为例,这一行等价于什么呢?等价于:char *cfg_getstr(const char *name, const char *def);
_CONFIG_MAKE_PROTOTYPE(fname,type);
返回类型为type类型,形参为const char *name
和类型为const type
的def
。
此时fname=str,type=char*
中,##
标记粘贴运算符,合并两个参数。将fname
和type
替换之后,即:char *cfg_getstr(const char *name, const char *def);
对于代码的具体实现,可以如下处理:
#define _CONFIG_GEN_FUNCTION(fname,type,convname,format) \ type cfg_get##fname(const char *name,const type def) { \ paramstr *_cfg_tmp; \ for (_cfg_tmp = paramhead ; _cfg_tmp ; _cfg_tmp=_cfg_tmp->next) { \ if (strcmp(name,_cfg_tmp->name)==0) { \ STR_TO_##convname(_cfg_tmp->value); \ } \ } \ if (logundefined) { \ mfs_arg_syslog(LOG_NOTICE,"config: using default value for option '%s' - '" format "'",name,def); \ } \ COPY_##convname(def); \ } _CONFIG_GEN_FUNCTION(str,char*,charptr,"%s") _CONFIG_GEN_FUNCTION(num,int,int,"%d") _CONFIG_GEN_FUNCTION(int8,int8_t,int32,"%"PRId8) _CONFIG_GEN_FUNCTION(uint8,uint8_t,uint32,"%"PRIu8) _CONFIG_GEN_FUNCTION(int16,int16_t,int32,"%"PRId16) _CONFIG_GEN_FUNCTION(uint16,uint16_t,uint32,"%"PRIu16) _CONFIG_GEN_FUNCTION(int32,int32_t,int32,"%"PRId32) _CONFIG_GEN_FUNCTION(uint32,uint32_t,uint32,"%"PRIu32) _CONFIG_GEN_FUNCTION(int64,int64_t,int64,"%"PRId64) _CONFIG_GEN_FUNCTION(uint64,uint64_t,uint64,"%"PRIu64) _CONFIG_GEN_FUNCTION(double,double,double,"%lf")
- 使用
-
#define 定义函数
2021-10-13 16:57:141.#define 定义函数,函数不带参数 #include <stdio.h> #include <stdlib.h> #define RESULT (x*2+5) int main() { int x = 10; printf("RESULT是:%d\n",RESULT); return 0; } 2.#define 定义... -
C语言#define拼接宏定义实现方式
2020-08-25 06:00:17今天小编就为大家分享一篇C语言#define拼接宏定义实现方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 -
详解C语言中的#define宏定义命令用法
2020-12-25 18:48:30命令#define定义了一个标识符及一个串。在源程序中每次遇到该标识符时,均以定义的串代换它。ANSI标准将标识符定义为宏名,将替换过程称为宏替换。命令的一般形式为: #define identifier string 注意: 1.该语句... -
C语言 define 定义常量 - C语言零基础入门教程
2021-09-03 09:35:42目录 一.define 简介 ...C 语言中,可以用 #define 定义一个标识符来表示一个常量,用 #define 定义标识符的一般形式为: #define 标识符 常量 //注意define最后没有分号 //例如: #define MAX_VALUE -
C语言宏定义和宏定义函数
2018-12-04 08:39:48要写好C语言,漂亮的宏定义是非常重要的。宏定义可以帮助我们防止出错,提高代码的可移植性和可读性等。 在软件开发过程中,经常有一些常用或者通用的功能或者代码段,这些功能既可以写成函数,也可以封装成为宏... -
【C语言】#define定义的标识符和宏
2022-03-02 13:09:42【C语言】#define定义的标识符和宏、以及宏的优点和缺点、#与##的用法 -
C语言 #define 用法
2022-02-18 11:23:48C语言 #define 基本用法 -
C语言中的内联函数(inline)与宏定义(#define)详细解析
2020-09-05 00:43:34内联函数与宏本质上是两个不同的概念如果程序编写者对于既要求快速,又要求可读的情况下,则应该将函数冠以inline -
C语言中宏定义和函数的取舍
2021-01-19 22:45:43要写好C语言,漂亮的宏定义是非常重要的。宏定义可以帮助我们防止出错,提高代码的可移植性和可读性等。 在软件开发过程中,经常有一些常用或者通用的功能或者代码段,这些功能既可以写成函数,也可以封装成为... -
C语言宏定义函数的使用(定义单行和多行)
2019-07-11 10:33:12要写好C语言,漂亮的宏定义是非常重要的。宏定义可以帮助我们防止出错,提高代码的可移植性和可读性等。 在软件开发过程中,经常有一些常用或者通用的功能或者代... -
C语言中如何定义函数式宏
2021-05-21 04:08:24C语言中如何定义函数式宏导语:众所周知,宏扩展是纯粹的文本扩展,若定义不明确,就会导致结果错误,或者编译错误,尤其是定义函数式宏时,下面有三条规则可以使我们避免出错。具体有哪些呢?一起来学习下吧:规则1... -
C语言:宏定义函数
2019-03-18 11:40:46#define MAX( a, b) ( (a) > (b) (a) : (b) ) //这里为什么有这么多括号,后面会讲 普通函数形式: int max(int a, int b) { return (a > b a : b) } 宏函数 优点:节省空间(给形参节省) ... -
关于C语言刷题(#define宏定义函数的常见错误)
2020-02-25 23:25:24关于C语言刷题(#define宏定义函数的常见错误) 首先我们来先看对#define的定义 define,宏定义,C语言中预处理命令一种。分为无参宏定义和带参宏定义。无参宏定义的一般形式为:#define 宏名 字符串;带参宏定义的... -
C语言宏定义值为函数返回值
2022-03-04 10:08:38在C语言编程过程中可能会遇到定义一个宏,但是这个宏的值是从另一个接口运行返回值。 可以使用如下我这种方式,demo代码如下: #include <stdio.h> #include <stdlib.h> #define TEST_VALUE 0x00000005... -
EDA/PLD中的C语言中宏定义和函数的取舍
2020-11-09 01:57:06要写好C语言,漂亮的宏定义是非常重要的。宏定义可以帮助我们防止出错,提高代码的可移植性和可读性等。 在软件开发过程中,经常有一些常用或者通用的功能或者代码段,这些功能既可以写成函数,也可以封装成为宏... -
C语言中define的用法详解
2021-09-26 08:48:10一、简单的define定义 #define MAXTIME 1000 一个简单的MAXTIME就定义好了,它代表1000,如果在程序里面写 if(i<MAXTIME){.........} 编译器在处理这个代码之前会对MAXTIME进行处理替换为100 -
C语言宏定义制作函数模板
2021-08-17 11:08:33当做协议栈或者批量化函数的时候,内容框架是固定的,如果要写1000个10000个函数确实手敲比较麻烦,一种是用工具批量产生这些函数,另一种就是宏定义,这里给出宏定义解决的方法,利用宏定义制作函数模板 ... -
C语言中#define用法总结
2018-04-09 16:49:521.简单的宏定义#define 标识符 替换列表(替换列表可以是数,字符串字面量,标点符号,运算符,标识符,关键字,字符常量。注意:替换列表是可以为空的)典型错误:#define N = 100int a[N]; /*这样会成为int a[= ... -
c语言宏定义函数如何调用
2021-05-24 06:22:33如下示例: #include#definesum(b,c){intd=0;d=b+c;printf("两者的和:%d\n",d);}intmain(){intx=0,y=0;scanf("%d%d",&x,&y);sum(x,y);return0;} 测试通过: #include#include#define sum(b,c){int d=0;d=b+c... -
c – 正确使用cpp中的define宏替换函数名称
2021-05-23 11:22:04我在Ubuntu上使用...问题是:我已经更改了项目的名称,我必须更改cpp中的一些代码(函数的名称),如果我不这样做,我会得到一个Java.lang.UNSATISFIEDLINKERROR.那是因为所有函数的名称都是Android包,如下所示:Ja... -
C语言中宏定义函数的运算优先级问题
2019-09-05 10:29:02宏定义在编译阶段被纯文本替换,因此使用宏定义函数时要特别注意优先级问题。 #include<iostream> using namespace std; #define DIV(x) x/x int main(){ int a = 12, k = 3, m = 1; a /= DIV(k + m) / ... -
C语言中的宏函数与宏定义
2022-04-01 20:47:56预处理工作是系统引用预处理程序对源程序中的预处理部分做处理,而预处理部分是指以“#”开头的、放在函数之外的、一般放在源文件的前面的预处理命令,如:包括命令 #include,宏命令 #define 等,合理地利用预处理... -
C语言define关键字全解析
2022-04-05 17:36:35在工程代码中,头文件的最开始就能看到一大片#define,今天我们就看一下define这个关键词究竟是怎么用的。这些知识主要来源于博主最近的实习经历和自己写代码的习惯提炼出来哦。 1.防止重复包含 不知道小伙伴们有... -
c语言中#define的用法
2021-05-24 00:45:15c语言中#define的用法C语言中,可以用 #define 定义一个标识符来表示一个常量。其特点是:定义的标识符不占内存,只是一个临时的符号,预编译后这个符号就不存在了。预编译又叫预处理。预编译不是编译,而是编译前的...