c - 是否有一个程序(或 sed 脚本)可以从 C 文件中删除一个函数?

标签 c git

<分区>

我需要一个脚本,我在其中传递一个 C 文件和一个函数名,它将从文件中删除该 C 函数。是否有实用程序可以执行此操作?

基本上,我希望开源一个内部开发的库,并希望保留它的历史。但是有些功能我不能开源。我一直在使用 git filter-branch 来删除不能开源的整个文件,但现在我已经到了需要从文件中删除某些功能的地步,其中文件的某些部分可能是开源的,但其他部分则不能。由于 git filter-branch 在每次提交时运行一个命令,我需要一些自动化的东西来从存储库的每次提交中删除这个功能。

最佳答案

与 lreeder 一样,我建议重构代码,以便开源和私有(private)内容位于不同的文件/库中。

但是,如果这对您不起作用,那么我认为您应该求助于对 C 代码的完整解析。相反,您可以做一些简单的事情,比如将文件的私有(private)部分放在 //PRIVATE//END-PRIVATE 等注释之间。然后你可以使用这个 ruby删除私有(private)部分的脚本:

#!/usr/bin/ruby

# remove_private.rb: Removes all lines between "PRIVATE" and "END-PRIVATE"
#
# Usage 1, output to STDIO:  cat filename.c | ruby remove_private.rb
# Usage 2, output to STDIO:  ruby remove_private.rb filename.c
# Usage 3, in-place editing of file (and creating a backup): ruby -i.bak remove_private.rb filename.c

while line = ARGF.gets
  unless (line =~ /PRIVATE/)..(line =~ /END-PRIVATE/)
    puts line
  end
end

这利用了 ruby​​ 的一些神奇而方便的特性来使代码简短,但我认为它比完整的 C 解析器更容易调试和维护。此外,开发人员可以在处理代码时轻松查看哪些函数是私有(private)的。对于我正在从事的项目,我做了一些与此非常相似的事情,我们想要发布 Makefile 的一部分而不是整个项目。也许您可以使用贵公司最喜欢的脚本语言重写它。

关于c - 是否有一个程序(或 sed 脚本)可以从 C 文件中删除一个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16884831/

相关文章:

windows - 如何使用 Powershell 执行查找命令

git - 使用 bitbucket 管道部署到 heroku 到非 master 分支

c - 一个简单的C程序来分析pcap文件,但它不能读取整个pcap文件

c++ - 关闭 C++ 注释中的 vim 语法高亮

c - 在单独的 .S 文件中编写内联汇编

c - 对齐的calloc, Visual Studio

c - 在C中按字母顺序排序单词

linux - 执行每个 git 命令后如何在 git bash 中打印时间戳?

git - 返回存储库中的特定修订后提交并推送更改?

git - Jenkins GIT 获取错误