构建VS2013解决方案(从VS8迁移)时出现以下错误:Error1errorC2220:warningtreatedaserror-no'object'filegeneratedC:\ProgramFiles\MicrosoftVisualStudio12.0\VC\atlmfc\include\afx.h38Warning2warningC4996:'MBCS_Support_Deprecated_In_MFC':MBCSsupportinMFCisdeprecatedandmayberemovedinafutureversionofMFC.C:\ProgramFiles\Micr
在用Doxygen记录的C++项目中,我在Doxygen注释中将一些函数标记为\deprecated。有什么方法可以使用这些注释(使用Doxygen或其他工具)来检测另一个未弃用的函数正在调用已弃用的函数吗?(该项目非常大,完成所有类(class)会花费很多时间)。谢谢 最佳答案 如果您使用GCC或clang编译您的代码,您可以手动注释函数。__attribute__((__deprecated__))voiddep_fun(){}然后在代码中的任何位置调用dep_fun都会发出诊断消息。如果您始终如一地放置doxygen的\dep
我目前正在研究C++17的新特性。我偶然发现了这个功能N4266,它指出现在枚举和命名空间也可以使用属性。不同消息来源称,VisualStudio2017已经完全支持该功能。我用[[deprecated]]属性编写了一个测试。对于namespace,这非常有效。但是,不会为枚举生成警告。我的实现有错误吗?我错过了什么吗?enumMyEnum{val=0,vaal[[deprecated]]=val};voidtest(){MyEnume=MyEnum::vaal;//ShouldemitWarning,butdoesnotMyEnume2=MyEnum::val;//NoWarning
在我工作的地方,我们使用的是“类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其实我也不知道。我已经在搜索这个