宏函数 CPP 一个强大的功能是可以使用参数化的宏来模拟函数,这里应用了 CPP 的 “字符串常量化运算符”,格式如下: #define <宏名>(<参数列表>) <宏体> 示例: // 函数 int square(int x) { return x * x; } // 带参数的宏定义 #define square(x) ((x) * (x)) 示例: ...
如果程序的文件名称是test.c,则linux环境可以通过命令gcc -E test.c > test.i,可以看到预编译结果,有心者可以自己分析下,仔细看看print函数的预编译结果。 如果要定义一个与函数名同名的函数,我们须在函数定义之后再定义宏,似乎不太优雅,没有别的方法么?有的,多文件实现之。有多文件及其源码如下: ///print....
C语言的宏文本替换,是通过预处理指令define实现的,#define的使用场景主要有:1)直接使用标识符不定义具体常量的标识符用法 2)替换常量的对象式宏(Object-like macros)3)模拟函数功能的函数式宏(Function-like macros)4)替换文中支持可变的参数数量的可变参宏 5)#和##运算法的用法等。define 标识符 当用...
这里foo()的调用会来自宏里面定义的那个函数,而funcptr会正确地指向函数地址,如果后者也被宏展开,则成了funptr=foo()显然就不对了。 函数类型的宏在定义时需注意,宏名与后面括号不能有空格,否则就是普通的 Object-like 类型对象。 #definelang_init () c_init()lang_init() // 编译后: () c_init()(...
宏是通过`#define`指令来定义的。其基本语法如下:#define 宏名 替换文本 或者,对于带参数的宏(类似于函数),语法如下:#define 宏名(参数列表) 替换文本 示例 1. 定义常量宏 #define PI 3.14159 这里,`PI`是一个宏,它在预处理阶段会被替换为`3.14159`。2. 定义带参数的宏 #define SQUARE(x) ((...
假如希望在字符串中包含宏参数,ANSIC允许这样作,在类函数宏的替换部分,#符号用作一个预处理运算符,它可以把语言符号转化程字符串。例如,如果x是一个宏参量,那么#x可以把参数名转化成相应的字符串。该过程称为字符串化(stringizing)。 #incldue #define PSQR(x) printf("the square of" #x "is %d.\n"...
大家好!今天我们来学习C语言的函数与宏定义。 首先我们来学习函数的概念。 在C语言中函数可以分为两类,一类是由系统定义的标准函数,这类函数又被称为是库函数,其函数的声明一般是放在系统的include目录下的以.h为后缀的头文件中,如在程序中要用到某个库函数,必须在调用该函数之前用#include<头文件名>命令将库...
你可以定义具有形式参数(简称“形参”)的宏。当预处理器展开这类宏时,它先使用调用宏时指定的实际参数(简称“实参”)取代替换文本中对应的形参。带有形参的宏通常也称为类函数宏(function-like macro)。 可以使用下面两种方式定义带有参数的宏: #define 宏名称( [形参列表] ) 替换文本 ...
首先我们的宏在编译阶段会直接和代码替换本次的宏就将printf函数内容进行了替换使SQUARE(3+2)替换成了3+2*3+2这样我们就得到了11的值。 所以使用宏的时候一定要加括号!加括号! #include<stdio.h> #define SQUARE(x) ((x) * (x)) ...
参考这里Concatenation#include//宏定义#defineGET_NAME(x)#xvoidfun0(){;}intmain(){//获取name==...