php 如何宏定义,[PHP] PHP源码常用代码中的宏定义

本文介绍了PHP编程中常用的预处理宏定义,包括#define的基本用法,如PHP_FUNCTION和ZEND_FUNCTION,带参数的宏定义,如ZEND_FN的使用,以及多表达式宏定义的示例。通过实例演示了宏定义如何在代码中简化并增强可维护性。
摘要由CSDN通过智能技术生成

PHP源码常用代码宏定义:

#define 宏名 字符串

#表示这是一条预处理命令,所有的预处理命令都以#开头。define是预处理命令。宏名是标识符的一种,命名规则和标识符相同。字符串可以是常数、表达式等。

在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”。

1.#define PHP_FUNCTION ZEND_FUNCTION

在编译预处理阶段会把PHP_FUNCTION 替换成 ZEND_FUNCTION

带参数宏定义:

#define 宏名(形参列表) 字符串

允许宏带有参数。在宏定义中的参数称为形式参数,在宏调用中的参数称为实际参数,这点和函数有些类似。

1.#define ZEND_FUNCTION(name) ZEND_NAMED_FUNCTION(ZEND_FN(name))

会把ZEND_FUNCTION(count) 替换成 ZEND_NAMED_FUNCTION(ZEND_FN(count))

宏参数的字符串化和宏参数的连接:

在宏定义中使用#用来将宏参数转换为字符串,也就是在宏参数的开头和末尾添加引号。

##称为连接符,用来将宏参数或其他的串连接起来。

1.#define ZEND_FN(name) zif_##name

带参宏定义加连接符,会把ZEND_FN(count) 替换成 zif_count

多表达式宏定义:

在宏定义中使用了 do{ }while(0) 语句格式,里面的代码至少会执行一次,不破坏原有的结构

源码总结:

php如下源码

#define PHP_FUNCTION ZEND_FUNCTION

#define ZEND_FUNCTION(name) ZEND_NAMED_FUNCTION(ZEND_FN(name))

#define ZEND_FN(name) zif_##name

#define ZEND_NAMED_FUNCTION(name) void name(INTERNAL_FUNCTION_PARAMETERS)

#define INTERNAL_FUNCTION_PARAMETERS int ht, zval *return_value, zval **return_value_ptr, zval *this_ptr, int return_value_used TSRMLS_DC

PHP_FUNCTION(count);

经过预处理器处理后:

1.ZEND_FUNCTION(count)

2.ZEND_NAMED_FUNCTION(ZEND_FN(count))

3.ZEND_NAMED_FUNCTION(zif_count)

4.void zif_count(INTERNAL_FUNCTION_PARAMETERS)

5.void zif_count(int ht, zval *return_value, zval **return_value_ptr, zval *this_ptr, int return_value_used TSRMLS_DC)

练习:

#include

#define N 100

#define M(y) y*y

#define STR(s) #s

#define CON(a,b) a##b

#define ALLOC_ZVAL(z) do {\z++;\

z=z+100;\

}while (0)intmain(){

printf("%d \n",N);//普通宏调用

printf("%d \n",M(N));//带参宏定义

printf("%s \n",STR(taoshihan));//字符串化

printf("%d \n",CON(123,456));//连接符

int i=0;

ALLOC_ZVAL(i);//多行宏定义

printf("%d \n",i);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值