C 如果启用了某个#define,如何防止SVN允许提交?

C 如果启用了某个#define,如何防止SVN允许提交?,c,svn,c-preprocessor,C,Svn,C Preprocessor,我使用#define宏来启用/禁用代码中的自动测试。例如,我可以使用以下行启用自动测试: #define FEATURE_AUTOMATED_TEST 当我提交代码时,我希望禁用此测试,因此我只需将其注释掉: //#define FEATURE_AUTOMATED_TEST (通常我不会在C代码中使用C++风格的注释,但对于这种东西来说,它非常方便。) 不幸的是,有时我(或其他人)意外地在SVN提交时启用了宏,需要后续的SVN提交来修复该问题。我知道我可以使用某种形式的#warning宏来帮

我使用
#define
宏来启用/禁用代码中的自动测试。例如,我可以使用以下行启用自动测试:

#define FEATURE_AUTOMATED_TEST
当我提交代码时,我希望禁用此测试,因此我只需将其注释掉:

//#define FEATURE_AUTOMATED_TEST
(通常我不会在C代码中使用C++风格的注释,但对于这种东西来说,它非常方便。)

不幸的是,有时我(或其他人)意外地在SVN提交时启用了宏,需要后续的SVN提交来修复该问题。我知道我可以使用某种形式的
#warning
宏来帮助防止这种情况,但我正在寻找更好的解决方案。SVN会说“嗯,天哪,你不能那样签入它,因为你已经启用了
功能\u自动测试
了。笨蛋。”

有什么想法吗?我完全愿意更改启用/禁用测试部分的方式。。。它不必使用
#define
,但必须在编译时排除任何禁用的测试代码。

您可以使用:

grep-l'^#定义。*功能自动测试'


对于宏的存在。如果上述命令的退出代码不同于
0

,则您将中止提交。您最好让
进行测试
(或
配置
,或其他)有条件地添加定义。那么你就不需要修改你的源代码来启用/禁用它了。非常好的建议。可能会很复杂,因为我们跨平台(Linux和Windows)使用相同的SVN存储库,所以任何解决方案都必须同时适用于这两个平台。我想我可以告诉Windows用户,他们必须安装grep并将它放到他们的路径上。:)