代码之家  ›  专栏  ›  技术社区  ›  Brendan Long

将空函数视为值

  •  2
  • Brendan Long  · 技术社区  · 16 年前

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

    error: void value not ignored as it ought to be
    

    我最明显的想法是:

    int myfree(char *p){
        free(p);
        return 0;
    }
    

    这是很好的,因为它使代码更不可读,但我宁愿不添加另一个函数。

    我也尝试过治疗 free() 作为一个函数指针,但我不知道这是否可行,而且我对C的了解也不够,无法正确地完成它。

    注意:我知道这是个糟糕的主意。孩子们,不要在家里这样做。

    编辑:谢谢大家,我改变了我的一行工作 isPalindrome() 功能如下:

    return (...)?(calls == 1?free(pLeft),1:1):(calls == 1?free(pLeft),0:0);
    

    (调用跟踪递归深度)

    不再有内存泄漏!

    4 回复  |  直到 16 年前
        1
  •  10
  •   CB Bailey    16 年前

    我不知道你要把它塞进什么地方,但是如果你需要一个释放指针的表达式 p

    (free(p), 0)
    
        2
  •  3
  •   Steve Jessop    16 年前

    可能是逗号运算符?

    char *buf;
    printf("%s", isPalindrome(fgets(buf = malloc(1000), 1000, stdin))? (free(buf), "Yes!\n"):(free(buf), "No!\n") >= 0;
    

    不过,不确定是否“允许”使用变量。

    printf("%s", isPalindrome_free(fgets(buf = malloc(1000), 1000, stdin))? "Yes!\n":"No!\n")) >= 0;
    
        3
  •  1
  •   TheCodeArtist    16 年前

    把它翻过来

    1. 做那件事 打印F 伊斯帕林德罗姆

    2. 内部 伊斯帕林德罗姆

    3. 主() isPalindrome()

        4
  •  1
  •   pajton    16 年前

    , 运算符到链函数调用,即:

    int main(){
        return printf("%s", isPalindrome(fgets(malloc(1000), 1000, stdin)) ? 
                     (free(p), "Yes!\n") : (free(p), "No!\n")) >= 0;
    }
    

    p 第一。

    推荐文章