Re: 是不是真的懂C? 看看这行code, (转载)

t
tns
楼主 (未名空间)

【 以下文字转载自 Military 讨论区 】
发信人: tns (TNS), 信区: Military
标 题: Re: 是不是真的懂C? 看看这行code,
发信站: BBS 未名空间站 (Thu Jun 18 22:52:27 2020, 美东)

也出个小题:

int *pi = malloc(sizeof (int));
long *pl = NULL;
float *pf = malloc(sizeof (float));
double *pd = malloc(sizeof (double));

FREE_ALL(pi, pl, pf, pd);

实现一下FREE_ALL,等效于下面的效果:
free(pi);
free(pf);
free(pd);

pl只是为了表明这个宏能接受空指针为参数
n
netghost

用varadic macro就可以了。
但是實際操作裏面這樣並不推薦,因爲這個先後順序是很重要的,這麼寫非常容易出錯。

此外,free本來就可以take null。
【 在 tns (TNS) 的大作中提到: 】
: 【 以下文字转载自 Military 讨论区 】
: 发信人: tns (TNS), 信区: Military
: 标 题: Re: 是不是真的懂C? 看看这行code,
: 发信站: BBS 未名空间站 (Thu Jun 18 22:52:27 2020, 美东)
: 也出个小题:
: int *pi = malloc(sizeof (int));
: long *pl = NULL;
: float *pf = malloc(sizeof (float));
: double *pd = malloc(sizeof (double));
: FREE_ALL(pi, pl, pf, pd);
: ...................

t
tns

没人帖个code?
n
netghost

你要這東西的point是啥?寫起來很簡單,但是我認爲沒有場景能這麼寫。

【 在 tns (TNS) 的大作中提到: 】
: 标 题: Re: 是不是真的懂C? 看看这行code, (转载)
: 发信站: BBS 未名空间站 (Fri Jun 19 21:45:38 2020, 美东)
:
: 没人帖个code?
: --
S
SuvTrucks

不一定是free, 任何接受一个指针的都可以。换成。DO_ALL free 换成do

【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 你要這東西的point是啥?寫起來很簡單,但是我認爲沒有場景能這麼寫。

n
netghost

這個就更沒譜了。操作和參數都隨便組合,絕對是bug的來源。

【 在 SuvTrucks (SUV&TRUCK) 的大作中提到: 】
: 不一定是free, 任何接受一个指针的都可以。换成。DO_ALL free 换成do

d
digua

这么简单,在实际中又没有意义的代码,能测出什么呢。

【 在 tns (TNS) 的大作中提到: 】
: 发信人: tns (TNS), 信区: Military
: 标 题: Re: 是不是真的懂C? 看看这行code,
: 发信站: BBS 未名空间站 (Thu Jun 18 22:52:27 2020, 美东)
: 也出个小题:
: int *pi = malloc(sizeof (int));
: long *pl = NULL;
: float *pf = malloc(sizeof (float));
: double *pd = malloc(sizeof (double));
: FREE_ALL(pi, pl, pf, pd);
: 实现一下FREE_ALL,等效于下面的效果:
: ...................