C++ 限制函数可在代码库中使用的时间
以下是我想做的: 我有一个遗留函数,在我们的代码库中只使用了3次。我想去掉这个函数,但它需要一些时间。同时,我想阻止其他开发人员在其他地方使用该函数。是否有办法在编译时强制执行此操作(例如,使用错误) 有什么想法吗C++ 限制函数可在代码库中使用的时间,c++,time,compilation,c-preprocessor,C++,Time,Compilation,C Preprocessor,以下是我想做的: 我有一个遗留函数,在我们的代码库中只使用了3次。我想去掉这个函数,但它需要一些时间。同时,我想阻止其他开发人员在其他地方使用该函数。是否有办法在编译时强制执行此操作(例如,使用错误) 有什么想法吗 更新:我忘了提到我的函数驻留在名称空间中。首先,不要将它放在标题中。在.c文件中本地声明它,这样它就不会公开可见 您也可以这样做: 公共_头.h: #define my_function(arg1, arg2, ...) exit(128) #定义我的函数(arg1,arg2,…)退
更新:我忘了提到我的函数驻留在名称空间中。首先,不要将它放在标题中。在.c文件中本地声明它,这样它就不会公开可见 您也可以这样做: 公共_头.h: #define my_function(arg1, arg2, ...) exit(128) #定义我的函数(arg1,arg2,…)退出(128) 在实际需要使用它的.cpp文件中: #undef my_function int my_function(int arg1, char *arg2, ...); #取消定义my_函数 int my_函数(int arg1,char*arg2,…); 对于gcc,您可以使用“弃用”属性
int old_fn () __attribute__ ((deprecated));
这将在每次使用函数时发出警告。 < P>作为C++ No.<
当然,也有一些技巧
其中一个技巧是在当前使用点附近尽可能局部地声明函数
- 只需在源文件的顶部声明它,就可以使用它,在includes的正下方
- 在使用它的源文件的顶部将它声明(并定义)为
,这有助于提高可见性,但意味着重复静态
#pragma warning
(不好)或deprecated
属性,但这将导致当前使用的警告,这可能会有问题(污染生成输出)。如果人们不为当前使用的警告而烦恼,他们也不会为新的警告而烦恼,这不是一个好习惯
现在,还有其他解决方案
您可以简单地编写一个钩子来扫描源文件并计算出现的次数
grep -r "deprecated_func" include src | wc -l
这个钩子既可以作为构建过程的一部分集成,也可以作为版本系统中的预提交钩子集成。请确保在删除一个函数后立即减少允许的出现次数
注意:您还可以将
不推荐使用的属性与编译器输出上的过滤器一起使用。但是这不算是非常有趣的问题!这让我想到了boost预处理器和(或C++0x的static_断言)的组合是否可以工作。一个大问题是每次我查看Boost.Preprocessor库时,它都会让我头晕目眩:)
最后,我想写的是
BOOST_STATIC_ASSERT(BOOST_PP_COUNTER)其他解决方案提供编译时警告,而不是残酷的退出。嘿,你想阻止它们,对吗?我很想建议使用sleep(4000);@tibur:只需将#define更改为无法编译的内容(然后你会得到一个错误:甚至更好)。我还想在声明中添加extern
。我想`#定义我的#函数(arg1,arg2,…)#错误“请不要使用它”会更好。我实际上已经尝试过了……你不能在#定义中使用#错误(这并不让我感到惊讶)。实际上,我希望此警告出现在函数的第四次使用中。是否可能?但是,您也会收到当前使用的警告。因此,-Werror
无法再被激活。只需混合和匹配…使用不推荐的属性,并在需要的三种情况下使用pragma指令禁用警告(我认为这是可能的,从来没有尝试过那个特别的警告)它会发出警告,还会告诉你用法在哪里。或者只是重命名原始函数(例如original\u function()
)而不使用不推荐的属性。然后用原始函数的名称创建一个新函数(如function()\u attribute\uuuuuuuuuuu((不推荐)){original_function();}
),使其不推荐使用,并使用新名称调用该函数。然后修复这3次出现的情况,以使用重命名的函数(original_function()
)。现有代码将编译而不抱怨,但如果有人使用它抱怨的不推荐使用的函数。