将void函数视为值

Rei*_*ica 2 c function

我正在编写一些可怕的,可怕的代码,我需要一种方法将free()置于语句中间.实际代码是:

int main(){
    return printf("%s", isPalindrome(fgets(malloc(1000), 1000, stdin))?"Yes!\n":"No!\n") >= 0;
    // leak 1000 bytes of memory
}
Run Code Online (Sandbox Code Playgroud)

我正在使用alloca(),但我无法确定它是否真的可以在我的目标计算机上运行.我的问题是免费返回无效,所以我的代码有这个错误消息:

error: void value not ignored as it ought to be
Run Code Online (Sandbox Code Playgroud)

我有一个明显的想法是:

int myfree(char *p){
    free(p);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这很好,因为它使代码更难以阅读,但我不想添加其他功能.

我也简单地尝试过将其free()视为一个函数指针,但我不知道这是否会起作用,而且我对C的理解还不够.

注意:我知道这是一个糟糕的主意.不要在家里尝试这个孩子.

编辑:非常感谢,我通过将我的单行isPalindrome()函数更改为:

return (...)?(calls == 1?free(pLeft),1:1):(calls == 1?free(pLeft),0:0);
Run Code Online (Sandbox Code Playgroud)

(调用跟踪递归深度)

没有更多的内存泄漏!

CB *_*ley 10

我不知道你要去哪里,但是如果你需要一个表达式将指针释放p为副作用并且评估为0,那么你可以使用它.

(free(p), 0)
Run Code Online (Sandbox Code Playgroud)