C++中还定义了 __cplusplus 如果编译器不是标准的,则可能仅支持以上宏名中的几个,或根本不支持。记住编译程序也许还提供其它预定义的宏名。 __LINE__ 及 __FILE__ 宏指示,#line指令可以改变它的值,简单的讲,编译时,它们包含程序的当前行数和文件名。 __DATE__ 宏指令含有形式为月/日/年的串,表示源文件...
C++中还定义了 __cplusplus 如果编译器不是标准的,则可能仅支持以上宏名中的几个,或根本不支持。记住编译程序也许还提供其它预定义的宏名。 __LINE__ 及 __FILE__ 宏指示,#line指令可以改变它的值,简单的讲,编译时,它们包含程序的当前行数和文件名。 __DATE__ 宏指令含有形式为月/日/年的串,表示源文件...
C语言中,宏名没有类型,其参数也没有类型。宏不存在类型问题,宏名无类型,它的参数也无类型,只是一个符号代表,展开时代入指定的字符串即可。宏定义时,字符串可以是任意类型的数据。在编译预处理时,对程序中所有出现的宏名,都用宏定义中的字符串去代换。
#define <宏名>(<参数列表>) <宏体> 示例: // 函数 int square(int x) { return x * x; } // 带参数的宏定义 #define square(x) ((x) * (x)) 示例: #include <stdio.h> #define MAX(x, y) ((x) > (y) ? (x) : (y)) int main(void) { printf("Max between 20 and 10...
C语言中宏名不是必须用大写字母表示,习惯上宏名用大写字母表示,以便于与变量区别。但也允许用小写字母。宏定义表示数据类型,使书写方便。例如: #define STU struct stu在程序中可用STU作变量说明: STU body[5],*p;#define INTEGER int。在程序中即可用INTEGER作整型变量说明: INTEGER a,b;应...
1)#define 叫做宏定义命令它也是C语言预处理命令的一种,所谓宏定义,就是用一个标识符来表示一个字符串。如果在后面的代码中出现了该标识符,那么就全部替换成指定的字符串。 2)#define N 100 就是宏定义,N为宏名,100是宏的内容(宏所表示的字符串)。在预处理阶段,对程序中所有出现的“宏名”,预处理器都会...
1) 可以使用其他类型说明符对宏类型名进行扩展,但对 typedef 所定义的类型名却不能这样做。如下所示: #define INTERGE int unsigned INTERGE n; //没问题 typedef int INTERGE; unsigned INTERGE n; //错误,不能在 INTERGE 前面添加 unsigned 2) 在连续定义几个变量的时候,typedef 能够保证定义的所有变量均...
中把标识符写成函数的形式,就可以认为是类函数宏。 #在宏定义中的作用 可以把符号转变成字符串。 #incldue <stdio.h> #define PSQR(x) printf("the square of" #x "is %d.\n",(x)*(x)) int main(void) { int y =4; PSQR(y);
带参数的宏定义不仅对字符串进行替换,还要对参数进行替换。 一般形式:#define 宏名(参数)字符串 例:给定圆的半径,求圆的面积(pi*r*r) 代码语言:javascript 复制 #include<stdio.h>#definePI3.14159#defineS(r)PI*r*r intmain(){float a=3.1;float area=S(a);printf("s=%f",area);return0;} ...
宏定义存储的类型有static 、auto、extern、及register,函数默认的存储类型应该是extern,意思是具有外部链接性的。一般来说,会通过extern来声明函数。存储具有如下特点:索引从 0 开始,数组在内存中占据连续的字节单元。数组占据的字节单元数等于数组元素个数乘以该数组所属数据类型的数据占据的字节单元数...