Possible Duplicate:
What are C macros useful for?

每隔几个月,我就会渴望go 学习一些我的大学编程教育从未涵盖的C语言.今天是宏.我对宏的基本理解是,它们是一个简单的搜索和替换,发生在你的代码prior上,直到它被编译.我很难理解你会用宏.我看到的大多数基本例子都是

TEST(a,%d);
#define TEST(a,b) printf(" The value of " #a " = " #b " \n", a)

//which expands to 
printf(" The value of a = %d \n",a);

(here中的示例)

从我的新手的Angular 来看,定义一个新函数似乎会给你同样的结果.我可以看出,在轻松搜索和替换之前的几天里,宏在快速修改大量源代码方面是多么有用,但有些东西告诉我,我遗漏了一些更重要的要点.

那么宏能为你做什么有用的事情呢?

推荐答案

一个原因是直到C99,内联关键字在C语言中不是标准的.因此,宏允许您内联小函数.它们在某些方面也像模板一样工作,即不必在宏定义中指定类型,例如:

#define MAX(x,y) ((x) > (y) ? (x) : (y))

该宏兼容整数、双精度、浮点等.

C++相关问答推荐

为什么这个select()会阻止?

为什么在C中设置文件的位置并写入文件,填充空字符?

*p[num]和(*p)num的区别

如何将字符串传递给函数并返回在C中更改的相同字符串?

C lang:当我try 将3个或更多元素写入数组时,出现总线错误

如何创建一个C程序来存储5种动物的名字,并在用户 Select 其中任何一种动物时打印内存地址?

对重叠字符串使用MemMove

用gcc-msse 2编译的C程序包含AVX 1指令

RawMotion的XInput2错误(具有较高值的XISelectEvents上的BadValue)

在移动数组元素时获得意外输出

在C中包装两个数组?

无法识别C编程语言的语法,如书中所示

Realloc():中止的下一个大小无效(核心转储)

宏观;S C调深度

将char*数组深度复制到 struct 中?

为什么INT_MIN是在c语言的头文件limits.h中定义的(-INT_MAX-1)而不是直接使用-2147483648

获取 struct 中匿名 struct 的大小

返回指向函数内声明的复合文字的指针是否安全,还是应该使用 malloc?

C99 的 %zu 格式说明符不起作用

假设函数调用返回的 string(char *) 上有 free() 是否安全?