代码之家  ›  专栏  ›  技术社区  ›  Clinton Blackmore

根据函数定义进行函数声明

  •  1
  • Clinton Blackmore  · 技术社区  · 16 年前

    我已经编写了一个包含许多函数的.cpp文件,现在需要在头文件中声明它们。我突然想到,我可以grep文件中的类名,并得到这样的声明,如果在定义之前完整的函数声明——返回代码、名称和参数(而不是函数体)——都在一行上的话,它也会工作得很好。

    在我看来,这是一个普遍有用的东西,必须解决了很多次。我很乐意编辑输出,不担心边缘情况;任何给我的结果是正确的95%的时间将是伟大的。

    i2cstatus_t NXTI2CDevice::writeRegisters(
        uint8_t  start_register,    // start of the register range
        uint8_t  bytes_to_write,    // number of bytes to write
        uint8_t* buffer = 0)        // optional user-supplied buffer
    {
    ...
    }
    

    以及其他一些类似的函数,得到了这个结果:

    i2cstatus_t NXTI2CDevice::writeRegisters(
            uint8_t  start_register,    // start of the register range
            uint8_t  bytes_to_write,    // number of bytes to write
            uint8_t* buffer = 0)
    

    对于包含在头文件中,经过一点编辑,就可以了。

    找回这个:

    i2cstatus_t writeRegisters(
            uint8_t  start_register,    
            uint8_t  bytes_to_write,    
            uint8_t* buffer);
    

    i2cstatus_t writeRegisters(uint8_t  start_register, uint8_t  bytes_to_write, uint8_t* buffer);
    

    2 回复  |  直到 16 年前
        1
  •  4
  •   Nikolai Fetissov    16 年前

    我想你倒过来了。宣言是这里的关键部分。具体实施就是细节。你试图节省自己的打字,但不小心设计和制作界面,这在任何语言中都很重要,但是在C++中 这个 事情。

    编辑:

    不适合评论的咆哮:

    我的问题是-如果它不是“公共接口”,为什么需要在标题中使用它?我的强烈观点是头文件包含的所有内容都是

    琐碎的?对!但我不能告诉你,我有多少次诅咒了一些代码的原作者(包括我自己),我不得不(再一次)阅读和理解这些代码,而这个琐碎的经验法则会让我省下那么多头发:)

    (Mostly) Private 文章。在设计层面上有几种处理方法:

    • 在C++中,不是所有的东西都必须是一个类,自由函数是伟大的。声明并使用函数指针,在 .cpp
    • 向前声明一个类,因此
    • 使用 pimpl here )
        2
  •  1
  •   Clinton Blackmore    16 年前

    我编译了 exuberant ctags 版本5.8。这个命令让我得到我想要的:

    /usr/local/bin/ctags -x --c-kinds=f $SOURCE |
    awk -v OFS=" " '$1=$1' |
    cut -d " " -f 5- |
    sed -e 's/[A-Za-z]*:://g' |
    sed -e 's/)$/);/'
    

    请注意,ctags命令本身提供了合理的输出,您可以在 -u 如果希望输出按其在文件中的显示顺序而不是按字母顺序显示,则标记。

    推荐文章