分配和比较编码风格

时间:2016-01-25 14:27:57

标签: c++ c coding-style

我被批评(没有真正的论据)在我的c代码中使用assign和compare这样比较:

if (!(buffer = malloc(1024))) {
    // handle failure
}

而不是:

buffer = malloc(1024);
if (!buffer) {
    // handle failure
}

要明确:这不是关于malloc(),而是关于在条件语句中进行分配。

就个人而言,从审美的角度来看,我更喜欢先前的版本。

此外,如果我为了识别当前Linux内核源代码中的类似构造而执行git grep -E "if \(\!\(.* = .*\)\)\) \{",我会在条件中找到几百个相同的分配,例如:在net/ipv4/ipconfig.c

if (!(d = kmalloc(sizeof(struct ic_device), GFP_KERNEL))) {
    rtnl_unlock();
    return -ENOMEM;
}

也常用于提升:

 // boost/lexical_cast/detail/converter_lexical.hpp
 if (!(i_interpreter.operator <<(arg)))
     return false;

 // boost/iostreams/filter/newline.hpp:
 if ((flags_ & f_has_LF) != 0) {
     if ((success = boost::iostreams::put(dest, LF)))
         flags_ &= ~f_has_LF;
 } else if (boost::iostreams::put(dest, CR)) {
     if (!(success = boost::iostreams::put(dest, LF)))
        flags_ |= f_has_LF;
 }

所以 - 除了你的个人观点 - 在一个声明中是否有好的技术论据支持或反对进行作业和比较?

2 个答案:

答案 0 :(得分:4)

据我所知,反对你的版本的论点往往是“人们不希望在条件中看到操作”。事实上,当查看类似C的代码时,我需要额外的心理努力来发现socketbindlisten来电,当它们被填充到if时,因为我期待if的条件来检查事情,而不是做事。

但那是关于它的。

答案 1 :(得分:0)

老实说,我没有看到可读性方面的显着差异。实际上,我更喜欢你的。