C语言中__P宏解释


最近在学习BSD的TCP/IP模块实现代码(TCP/IP详解 卷2:实现),遇到__P这个宏,Google得知作用如下。

因为ANSI C的老编译器不支持函数函数原型定义,所以使用__P系统宏解决代码的移植性问题。这样,编写的C代码能够在ANSI的编译器和非ANSI的编译器上都可以编译通过。

__P宏的实现如下代码所示。

# if defined(__STDC__) || defined(__GNUC__)
# define __P(x) x
# else
# define __P(x) ()
# endif


从宏的实现可以看出,__P可以视为不存在,不影响代码阅读。


(完)


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用以下代码实现: ``` #include<stdio.h> #define YEAR (__DATE__[7]=='9'&&__DATE__[8]=='9'?0:\ __DATE__[7]=='0'&&__DATE__[8]=='0'?100:\ __DATE__[7]=='1'&&__DATE__[8]=='9'?200:\ __DATE__[7]=='2'&&__DATE__[8]=='9'?300:0) #define MONTH (__DATE__[0]=='J'&&__DATE__[1]=='a'&&__DATE__[2]=='n'?1:\ __DATE__[0]=='F'&&__DATE__[1]=='e'&&__DATE__[2]=='b'?2:\ __DATE__[0]=='M'&&__DATE__[1]=='a'&&__DATE__[2]=='r'?3:\ __DATE__[0]=='A'&&__DATE__[1]=='p'&&__DATE__[2]=='r'?4:\ __DATE__[0]=='M'&&__DATE__[1]=='a'&&__DATE__[2]=='y'?5:\ __DATE__[0]=='J'&&__DATE__[1]=='u'&&__DATE__[2]=='n'?6:\ __DATE__[0]=='J'&&__DATE__[1]=='u'&&__DATE__[2]=='l'?7:\ __DATE__[0]=='A'&&__DATE__[1]=='u'&&__DATE__[2]=='g'?8:\ __DATE__[0]=='S'&&__DATE__[1]=='e'&&__DATE__[2]=='p'?9:\ __DATE__[0]=='O'&&__DATE__[1]=='c'&&__DATE__[2]=='t'?10:\ __DATE__[0]=='N'&&__DATE__[1]=='o'&&__DATE__[2]=='v'?11:\ __DATE__[0]=='D'&&__DATE__[1]=='e'&&__DATE__[2]=='c'?12:0) #define DAY (__DATE__[4]==' '?__DATE__[5]-'0':(__DATE__[4]-'0')*10+(__DATE__[5]-'0')) int main() { printf("%d/%02d/%02d\n", YEAR, MONTH, DAY); return 0; } ``` 在上述代码,我们首先定义了三个,YEAR、MONTH和DAY,分别用于获取年、月和日的值。 YEAR的定义,我们根据__DATE__的格式,判断年份是19xx年、20xx年还是21xx年,并将其转换为对应的数值。 MONTH的定义,我们根据__DATE__的格式,判断月份的字符串,将其转换为对应的数值。 DAY的定义,我们从__DATE__的格式获取日的数值。 最后,在main函数,我们使用printf函数将年、月、日按照YY/MM/DD的格式输出。由于月和日的数值可能只有一位,因此我们使用%02d格式化输出,保证输出的数值始终占据两位。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值