在我工作的地方,我们使用的是“类COM”模型,因为我们通常遵循COM规则,但不执行MIDL编译,也不针对c/c++以外的其他语言。因此,我知道我总是可以改变规则以满足我的需要,但我尽量不这样做,因为我们可能希望有一天能够真正兼容COM,如果那一天到来,我们希望它尽可能轻松。我想在任何人使用特定接口(interface)的特定方法编译代码时打印警告。在c++中(我们只支持微软编译器),我们会在函数声明前加上__declspec(deprecated)来达到我们的目的。我可以只将它添加到我的接口(interface)方法声明之前,还是有更好、更COM的方法来做到这一点?我还想知道是否仅在方
C++11中是否有任何新的、很酷的功能允许我们在编译时检测现在标记为已弃用的API是否实际被某人调用?从我读到的有关新static_assert功能的内容来看,它似乎不够灵活,无法用于此类分析。但是我们还有什么可以用的吗?可选地,boost中是否有任何允许这种编译时检查的东西? 最佳答案 对于C++14,您将有以下选择:#includevoidfoo(intv){std::coutClang给出编译输出(here):main.cpp:12:10:warning:'counter'isdeprecated[-Wdeprecated-d
这个问题在这里已经有了答案:Whyisthegetsfunctionsodangerousthatitshouldnotbeused?(13个答案)关闭去年。基于mostrecentdraft对于C++11,C++引用ISO/IEC9899:1999/Cor.3:2007(E)以了解C库函数的定义(根据§1.2[intro.refs]/1)。基于mostrecentdraft在C99TC3中,gets函数已过时,已弃用。(根据§7.26.9/2)我可以肯定地说gets()在C和C++中都被弃用了吗?
我正在减少和隔离我对某些库的使用。我编写的许多现有程序直接使用这些库。我想要编译器(在这种情况下是GCC和/或Clang)或一些工具来帮助我在我的代码库中识别这些用途。简而言之,我想在整个代码库中毒害这些库的使用,除了它们将由一个库使用,并且一个库将对我的代码库中的其他模块可见。问题:1)你知道可以帮助我解决这个问题的工具吗?2)或者你能推荐一些策略来使这个过程更容易吗?条件和详情:删除它们的包含不是一种选择。由于我的代码库的大小和我想要隔离的符号数量,搜索无效。考虑到代码库的复杂性和要删除的符号数量,使用重构工具将过于乏味。由于第三方库中声明的数量,单独弃用符号不是一种选择。第三方库
在VisualStudio中,是否可以根据函数的签名而不是简单的名称来#deprecated一个函数?在我的例子中,我们使用的是C++,不想弃用该函数的所有风格intfoo(); 最佳答案 只需这样做:__declspec(deprecated)voidfoo(int){}并且如果您希望编译器在编译已弃用的函数时生成特定消息,请执行以下操作:__declspec(deprecated("foo(int)isadeprecatedfunction."))voidfoo(int){} 关于c
当函数的返回类型需要改变时,有什么策略可以弃用函数?例如,我有:BadObjectfoo(int);//Oldfunction:BadObjectisbeingremoved.Objectfoo(int);//Newfunction.Object和BadObject在内部非常不同,交换它们的返回类型会破坏我库的当前用户的代码。我的目标是避免这种情况。我可以标记BadObjectfoo(int)deprecated,并给用户时间来更改受影响的代码。然而,我can'toverloadfoobasedonreturn-type.foo的命名很好,不需要额外的参数。我怎样才能将新功能添加到我的
我正在使用scons和ubuntu。当我使用'scons'制作一些程序时,会发生错误,例如,src/db/DBTextLoader.cc:296:3:error:‘templateclassstd::auto_ptr’isdeprecated[-Werror=deprecated-declarations]/usr/include/c++/5/bits/unique_ptr.h:49:28:note:declaredheretemplateclassauto_ptr;这是我的命令;$./configuer$sourcesomething.sh$scons其实我也不知道。我已经在搜索这个
我想测试源文件中常量的使用情况,如果使用了,则停止编译。有问题的常量是在一个通用驱动程序文件中定义的,许多驱动程序实现都继承自该文件。但是,它的使用已被弃用,因此每个驱动程序的后续更新应切换为使用新的方法调用,而不是使用此const值。这显然行不通#ifdefCONST_VAR#error"custommessage"#endif我怎样才能优雅地做到这一点?由于它是一个int,我可以将CONST_VAR定义为一个字符串并让它失败,但这可能会使开发人员难以理解到底出了什么问题。我希望收到一条不错的#error类型消息。有什么建议吗?这里的Poison答案非常好。然而,对于不支持[[dep
在应该能够在C和C++文件中编译的header中,在VisualStudio(2010)和MinGW(32位-v3.4.5、64位-v4.5.0)中,我试图最小化大小通过更改每一行(其中有很多)://forsymbolA#ifdef__GNUC__#warningSymbolAisdeprecated.UsepredefinedconstcnAinstead.#else#pragmamessage("SymbolAisdeprecated.UsepredefinedconstcnAinstead.")#endif//SameforB//SameforC//...到//definethi
在不查看我的XCode项目中的每个源文件的情况下,有没有办法找出哪个#include触发了以下警告?#warningThisfileincludesatleastonedeprecatedorantiquatedheader.Pleaseconsiderusingoneofthe32headersfoundinsection17.4.1.2oftheC++standard.ExamplesincludesubstitutingtheheaderfortheheaderforC++includes,orinsteadofthedeprecatedheader.Todisablethisw