标签: compiler-warnings

C++ Boost:这个警告的原因是什么?

我有一个简单的C++与Boost像这样:

#include <boost/algorithm/string.hpp>

int main()
{
  std::string latlonStr = "hello,ergr()()rg(rg)";
  boost::find_format_all(latlonStr,boost::token_finder(boost::is_any_of("(,)")),boost::const_formatter(" "));
Run Code Online (Sandbox Code Playgroud)

这很好用; 它取代了每次出现的(),用""

但是,我在编译时收到此警告:

我正在使用MSVC 2008,Boost 1.37.0.

1>Compiling...
1>mainTest.cpp
1>c:\work\minescout-feat-000\extlib\boost\algorithm\string\detail\classification.hpp(102) : warning C4996: 'std::copy': Function call with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators'
1>        c:\program files (x86)\microsoft visual studio 9.0\vc\include\xutility(2576) : see declaration of 'std::copy'
1>        c:\work\minescout-feat-000\extlib\boost\algorithm\string\classification.hpp(206) : see …
Run Code Online (Sandbox Code Playgroud)

c++ boost compiler-warnings

46
推荐指数
4
解决办法
3万
查看次数

C#编译器警告1685

所以,(看似)突然之间,我的项目开始得到编译器警告1685:

预定义类型"System.Runtime.CompilerServices.ExtensionAttribute"在全局别名中的多个程序集中定义; 使用'c:\ Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll'中的定义

困惑,我研究了MSDN文章,找出其原因.这是我发现的信息:

Visual C#参考:错误和警告编译器警告(级别1)CS1685

错误消息预定义类型"System.type name"在全局别名中的多个程序集中定义; 使用'文件名'中的定义

在两个程序集中找到预定义的系统类型(如System.int32)时,会发生此错误.这种情况的一种方法是,如果您从两个不同的位置引用mscorlib,例如尝试并行运行.Net Framework版本1.0和1.1.

编译器将仅使用其中一个程序集中的定义.编译器仅搜索全局别名,不搜索库定义/引用.如果已指定/ nostdlib,则编译器将搜索Object,并在将来启动所有搜索到找到Object的文件中的预定义类型.

现在我真的在挠头.

  1. 我没有运行两个不同版本的.NET Framework(除非你算上2.0和3.5).

  2. 我没有引用可能让我怀疑的任何奇怪的集会.

  3. 我不记得对我的应用程序进行任何更改会刺激这种变化.

  4. 我已经验证所有组件都针对.NET Framework版本v2.0.50727.

我愿意接受有关如何纠正此问题的建议或想法.我将警告视为错误,这让我发疯.

真正让我烦恼的是,我不知道它为什么会发生.发生的事情应该有一个可辨别的原因,我应该知道它们为什么会发生.如果我无法解释,我无法准确地解决它.猜测工作永远不会令人满意.

该应用程序很简单,由类库和Windows窗体应用程序组成.

  • AC#类库DLL提供封装数据库访问的基本功能.此DLL引用以下组件:

    • 系统
    • System.Core程序
    • System.Core.Data
    • System.Data
    • System.Data.DataSetExtensions
    • System.Data.OracleClient的
    • System.Drawing中
    • System.Windows.Forms的
    • 的System.Xml
    • System.Xml.Linq的
  • 提供UI的AC#Windows Forms应用程序.此应用程序引用以下组件:

    • CleanCode
    • CleanCodeControls(这两者都提供语法编辑器支持,并且是针对.NET 3.5本地构建的).
    • LinqBridge
    • Roswell.Framework(上面的类库)
    • 系统
    • System.Core程序
    • System.Data
    • System.Data.DataSetExtensions
    • System.Data.OracleClient的
    • System.Deployment
    • 系统设计
    • System.Drawing中
    • System.Windows.Forms的
    • 的System.Xml
    • System.Xml.Linq的

如果您需要更多信息,请告诉我,我很乐意提供.

.net c# compiler-warnings

45
推荐指数
5
解决办法
3万
查看次数

C/C++:如何使用do-while(0); 构造没有编译器警告,如C4127?

由于本答案中描述的原因,我经常在我的#defines中使用do-while(0)构造.此外,我正在尝试使用尽可能高的编译器警告级别来捕获更多潜在问题,并使我的代码更加健壮和跨平台.所以我通常使用-Wallgcc和/WallMSVC.

不幸的是,MSVC抱怨do-while(0)构造:

foo.c(36) : warning C4127: conditional expression is constant
Run Code Online (Sandbox Code Playgroud)

我应该怎么做这个警告?

只是为所有文件全局禁用它?对我来说这似乎不是一个好主意.

c c++ macros compiler-warnings visual-c++

44
推荐指数
5
解决办法
1万
查看次数

C#:是否需要pragma警告恢复?

msdn我得到这个:

#pragma warning disable warning-list
#pragma warning restore warning-list
Run Code Online (Sandbox Code Playgroud)

在示例中,使用了disablerestore.restore如果我想要为整个文件禁用它,是否有必要?

就像,如果我不恢复,它携带多远?之后编译的所有内容都禁用警告吗?或者仅仅是该文件的其余部分?还是被忽略了?

c# pragma compiler-warnings

43
推荐指数
1
解决办法
7570
查看次数

为什么C++代码缺少函数定义中的正式参数名称而没有警告?

在开始使用一些VS2005生成的MFC代码时,我注意到它覆盖了一个类似这样的方法:

void OnDraw(CDC* /*pDC*/)
{
    ...
    // TODO: Add your code here
}
Run Code Online (Sandbox Code Playgroud)

所以,当然,只要我补上一我意识到我需要以编译取消注释在PDC正式的说法,但我很困惑,如何/为什么在C++函数可以编译(无警告)何时正式参数只有一个类型,而不是一个名称:

void foo(int)
{
    int x = 3;
}
int main()
{
    foo(5);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这不应该产生至少一个警告(使用-Wall或/ W4)?它似乎没有.我错过了什么吗?是否有这种情况有用,或者只是因为编译器无法区分函数声明(只需要类型)和定义(完全指定)之间的区别,直到处理完行后?

c++ compiler-warnings

43
推荐指数
3
解决办法
2万
查看次数

检查Makefile中的gcc版本?

我想使用一些旧的gcc版本中没有的gcc警告开关(例如-Wtype-limits).

是否有一种简单的方法来检查gcc版本,如果使用最近的gcc,只添加那些额外的选项?

portability gcc makefile version compiler-warnings

43
推荐指数
4
解决办法
4万
查看次数

编译器警告 - 建议用作真值的赋值括号

当我尝试编译下面的代码时,我收到此警告:

warning: suggest parentheses around assignment used as truth value

为什么会这样?我相信这是一个相当普遍的习语.我甚至在我的代码中使用了类似的东西.

struct PIDList* 
getRecordForPID(struct PIDList* list, pid_t pid) {
    while(list = list->next)
        if (list->pid == pid)
            return list;

    return NULL;
}
Run Code Online (Sandbox Code Playgroud)

c compiler-construction compiler-warnings

43
推荐指数
3
解决办法
10万
查看次数

动态转发:禁止不完整实施警告

我有一个暴露一些方法的类,其实现由内部对象提供.

我正在使用前向调用在运行时调度方法调用内部对象,但XCode抱怨,因为它无法找到声明的方法的实现.

我在SO上发现了一些其他类似的问题,但所有这些问题都是通过改变设计来解决的.

我并不是要在这里讨论设计,但如果有人对此有任何建议,我对Code Review 有一个未解决的问题,这个问题更适合这种讨论.

我的问题是,是否Incomplete Implementation存在关闭XCode警告的方法.

xcode objective-c llvm compiler-warnings suppress-warnings

42
推荐指数
2
解决办法
7669
查看次数

编译期间"Ignoring InnerClasses属性"警告输出是什么?

我是Android新手,我正在使用该Ical4j库来解析ICS(Outlook日历)文件.

但是,当我在Eclipse中构建应用程序时,控制台中会多次出现以下警告:

[2010-07-22 15:58:31 - Google日历上传]警告:忽略没有关联的EnclosingMethod属性的匿名内部类的InnerClasses属性.(这个类可能是由一个破碎的编译器产生的.)

这有什么影响?我该如何解决这个问题?

android compiler-warnings

41
推荐指数
2
解决办法
4万
查看次数

宏名称的有效字符是什么?

C风格的宏名称是否与标识符具有相同的命名规则?在编译器升级之后,它现在为遗留应用程序发出此警告:

warning #3649-D: white space is required between the macro name "CHAR_" and its replacement text
  #define         CHAR_&        38
Run Code Online (Sandbox Code Playgroud)

这行代码定义了&符号的ASCII值常量.

#define   DOL_SN        36
#define   PERCENT       37
#define   CHAR_&        38
#define   RT_SING       39
#define   LF_PAR        40
Run Code Online (Sandbox Code Playgroud)

我假设这个定义(实际上没有被任何代码引用,据我所知)是错误的,应该改为像"CHAR_AMPERSAND"这样的东西?

c compiler-warnings c-preprocessor

40
推荐指数
3
解决办法
5万
查看次数