C利用宏定义写一些小函数

求最大值、求余数:

 1 #include <stdio.h>
 2
 3 #define SURPLUS(A,B) ((A)%(B))
 4 #define max(A,B) (A>B ? A:B)
 5
 6 main()
 7 {
 8     printf("%d\n",max(2,3));
 9     //getch();
10     return 0;
11 }
时间: 2024-07-30 14:22:06

C利用宏定义写一些小函数的相关文章

指针直接赋值为整型AND利用宏定义求结构体成员偏移量

首先我们要更正一个很熟悉的概念,那就是指针不仅仅是“地址”,指针还有一个很重要的特性,那就是“类型”. 指针初始化时,“=”的右操作数必须为内存中数据的地址,不可以是变量,也不可以直接用整型地址值(但是 int *p = 0; 除外,该语句表示指针为空): 所以 int *p = 10; 这样的代码是不允许的.在C++里面直接是error的,即使在一些C编译器中以warning的形式提示,但是warning有的时候也很严重.所以这种东西不要用.从const int到int*是不存在隐士转换的.

C语言利用va_list、va_start、va_end、va_arg宏定义可变参数的函数

在定义可变参数的函数之前,先来理解一下函数参数的传递原理: 1.函数参数是以栈这种数据结构来存取的,在函数参数列表中,从右至左依次入栈. 2.参数的内存存放格式:参数的内存地址存放在内存的堆栈段中,在执行函数的时候,从最后一个(最右边)参数开始入栈.因此栈底高地址,栈顶低地址,举个例子说明一下: void test(int a, float b, char c); 那么,在调用test函数的时候,实参char c先进栈,然后是float b,最后才是int a,因此在内存中变量的存放次序是c->

6、C_宏定义与预处理、函数与函数库

C语言预处理理论 由源码到可执行程序的过程 源码.c->(编译)->elf可执行程序 源码.c->(编译)->目标文件.o->(链接)->elf可执行程序 源码.c->(编译)->汇编文件.S->(汇编)->目标文件.o->(链接)->elf可执行程序 源码.c->(预处理)->预处理过的.i源文件->(编译)->汇编文件.S->(汇编)->目标文件.o->(链接)->elf可执行程序

宏定义与内联函数

1.宏定义的规则和使用解析(1)宏定义的解析规则就是:在预处理阶段由预处理器进行替换,这个替换是原封不动的替换.(2)宏定义替换会递归进行,直到替换出来的值本身不再是一个宏为止.(3)一个正确的宏定义式子本身分为3部分:第一部分是#dedine ,第二部分是宏名 ,剩下的所有为第三部分.(4)宏可以带参数,称为带参宏.带参宏的使用和带参函数非常像,但是使用上有一些差异.在定义带参宏时,每一个参数在宏体中引用时都必须加括号,最后整体再加括号,括号缺一不可. 宏定义示例1:MAX宏,求2个数中较大的

宏定义与内置函数的比较

/* time:20200415 where:gfdx man:g-7.net */ #include<iostream> using namespace std; #define doub(x)x*2 int main() { for (int i = 1; i <= 4; i++) { cout << i << '\t'<< "doubled is" << '\t'<<double(i) <<

va_list、va_start、va_arg、va_end等利用宏定义实现可变参数

#include <stdio.h> //#include <stdlib.h> //#include <stdarg.h> //int sum(int n, ...); typedef void* va_list; #define _INTSIZEOF(arg) ((sizeof(arg) + sizeof(int) - 1)&(~(sizeof(int) - 1))) //字节对齐,针对32位系统 #define va_start(arg,start) ar

关于宏定义与内联函数

//定义了这个宏之后 #define CC_SYNTHESIZE_READONLY(varType, varName, funName) protected: varType varName; public: inline virtual varType get##funName(void) const { return varName; } //执行下面语句 CC_SYNTHESIZE_READONLY(CANavigationController*, m_pRootNavigationCon

ObjC宏定义-预编译小功能

以前看来#号,好像只是预编译,原来它还可以有跟Swift中"\( )"的拼接功能 例如: #define string(x) #x 意思就是 string(x) = "x"; 然后还是一个高级拼接: #define printxvar(n) printf("%i\n", x ## n) 意思就是输出一个变量名为xn的东西 例如 int xn = 10; printxvar(n) 就会输出 10.

C语言宏定义和宏定义函数

要写好C语言,漂亮的宏定义是非常重要的.宏定义可以帮助我们防止出错,提高代码的可移植性和可读性等. 在软件开发过程中,经常有一些常用或者通用的功能或者代码段,这些功能既可以写成函数,也可以封装成为宏定义.那么究竟是用函数好,还是宏定义好?这就要求我们对二者进行合理的取舍. 我们来看一个例子,比较两个数或者表达式大小,首先我们把它写成宏定义: #define MAX( a, b) ( (a) > (b) (a) : (b) ) 其次,把它用函数来实现: int max( int a, int b)