typedef char* string;
int func1(string s);
char* func2(); // returns a new memory/
if(func1(func2()) == 4)
{
// code
}
假设只在条件中需要func2()。由于我需要释放新分配的内存,我如何在相同的行内释放它(即具有相同的条件或paranthesis)?我的动机是保持代码清洁。
编辑1。 是的,这是一个问题。使用“string”类型对我来说是错误的,因为我总是将它键入到char *中。对不起,感到困惑。
答案 0 :(得分:8)
要干净利落地完成这项工作,请创建一个能够以清晰的方式完成工作的新功能:
static int func3()
{
char *s = func2();
int result = func1(s);
free(s);
return result;
}
…
if (func3() == 4)
…
(据推测,可以确保func2
成功分配内存。如果没有,则必须测试其返回值。)
答案 1 :(得分:1)
将它释放到同一行,没有新的函数定义:
int result;
char *temp;
/* comma operator: evaluate these 4 expressions left-to-right,
and the value is the value of the last expression */
if(temp = func2(), result = (func1(temp) == 4), free(temp), result)
{
/* Do things */
}
清洁代码:
int func3(void)
{
char *temp;
int result;
temp = func2();
result = func1(temp);
free(temp);
return result;
}
/* ... */
if(func3() == 4)
{
/* do things */
}
答案 2 :(得分:1)
以下是使用功能方法的解决方案:
int apply_free(int (*f1)(char*), char * (*f2)()) {
char *s = f2();
if (s != NULL) {
int result = f1(s);
free(s);
return result;
}
else {
return -1; /* or any meaningful value if f2 returned a NULL pointer */
}
}
if (apply_free(func1, func2) == 4)
{
// code
}
这假设您的各种案例具有相同的类型签名。