标签: compiler-warnings

关于ExtensionAttribute的奇怪警告

我收到一个奇怪的警告:

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

没有给出行号,所以很难弄清楚它是什么.

编译器错误代码是CS1685

c# compiler-warnings

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

有没有办法让VS2008停止警告我无法访问的代码?

我的应用程序中有一些配置选项

const bool ExecuteThis=true;
const bool ExecuteThat=false;
Run Code Online (Sandbox Code Playgroud)

然后像使用它的代码

if(ExecuteThis){ DoThis(); }
if(ExecuteThat){ DoThat(); } //unreachable code warning here
Run Code Online (Sandbox Code Playgroud)

问题是,我们可能会制作略有不同的版本,而不是ExecuteThis或ExecuteThat,我们希望能够使用consts,这样我们就不会在运行时对这些事情进行任何速度惩罚.但我厌倦了看到关于无法访问的代码的警告.我是一个喜欢消除所有警告的人,但我对这些事情无能为力.我可以使用一些选项来关闭这些警告吗?

c# compiler-warnings

32
推荐指数
4
解决办法
8295
查看次数

错误C2220:警告被视为错误 - 未生成"对象"文件

我有下面的课:

class Cdata12Mnt
{
public:
    char IOBname[ID1_IOB_PIOTSUP-ID1_IOB_TOP][BOADNAM_MAX + 4];
    char ExIOBname[ID1_MAX_INF-ID1_EXIOB_U1TOP][BOADNAM_MAX + 4];
    char cflpath[256];
    char basetext[256];
    UINT database[ID1_MAX_INF];
    int State;

public:
    char SelectPath[256];

public:
    int GetIOBName(int slt,char *Name);
    Cdata12Mnt(char *SelectPath);
    virtual ~Cdata12Mnt();
    int     GetValue(int id);
    int     GetState() { return State; }
};
Run Code Online (Sandbox Code Playgroud)

我的功能如下:

Cdata12Mnt::Cdata12Mnt(char *SelectPath)
{
    SCTReg  reg;
    char    buf[256], *cpnt, *npnt, *bpnt1, *bpnt2;
    char    *startcode[] = {"CNTL_CODE ","SEGMENT "};
    char    *stopcode    = {"END_CNTL_CODE "};
    FILE    *fp;
    int     ii, infl;

    State = 0;

    for (ii = 0; ii < …
Run Code Online (Sandbox Code Playgroud)

c++ compiler-errors project object compiler-warnings

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

在特定变量上禁用GCC"可以使用未初始化"

我在堆栈变量上收到此警告:

warning: object.member may be used uninitialized in this function
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我不希望强制初始化只是为了消除警告,因为它消耗CPU周期.变量是POD结构,所以memset它不是零成本.我可以验证变量从未使用过未初始化,所以我只想禁止它的警告.

一般来说,我确实需要警告,而不是在这个特定情况下的特定变量.我怎么能抑制警告?


看起来pragma诊断是正确的方法,但它们需要相当新版本的GCC(4.6)

在该版本之前,没有可接受的解决方案.

c++ gcc compiler-warnings

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

通过显式实现具有可选参数的接口的警告

我正在玩可选参数,看看它们如何与接口配合使用,我遇到了一个奇怪的警告.我的设置是以下代码:

 public interface ITestInterface
 {
     void TestOptional(int a = 5, int b = 10, object c = null);
 }

 public class TestClass : ITestInterface
 {

     void ITestInterface.TestOptional(int a = 5, int b = 5, object c = null)
     {
        Console.Write("a=" + a + " b=" + b + " c=" + c);
     }
 }
Run Code Online (Sandbox Code Playgroud)

编译器给了我以下警告:

  • 为参数'a'指定的默认值将不起作用,因为它适用于在不允许可选参数的上下文中使用的成员
  • 为参数"b"指定的默认值将不起作用,因为它适用于在不允许可选参数的上下文中使用的成员
  • 为参数"c"指定的默认值将不起作用,因为它适用于在不允许可选参数的上下文中使用的成员

如果我使用以下代码运行它:

class Program
{
    static void Main(string[] args)
    {
        ITestInterface test = new TestClass();
        test.TestOptional();
        Console.ReadLine();
    }
}
Run Code Online (Sandbox Code Playgroud)

a=5 b=10 c=正如我所料,我得到了" …

c# optional-parameters compiler-warnings c#-4.0

30
推荐指数
2
解决办法
5856
查看次数

为xcode/iPhone构建规则

我将facebook SDK合并到一个更新中,我得到四个文件的编译器警告,在我的一个目标中,每个文件都有两个这样的警告.

[WARN]警告:没有规则处理架构armv7类型sourcecode.ch的'$(PROJECT_DIR)/ APP_NAME /Facebook.h'文件

[WARN]警告:没有规则处理架构armv6类型sourcecode.ch的'$(PROJECT_DIR)/ APP_NAME /Facebook.h' 文件

在另一个目标中,每个文件只生成一个警告,

[WARN]警告:没有规则处理架构i386类型sourcecode.ch的'$(PROJECT_DIR)/ APP_NAME /FBConnect.h' 文件

在facebook SDK的文档中,他们告诉我将i386添加到构建设置中的有效架构,但他们没有说任何关于任何"构建规则"的事情,奇怪的是我已经将相同的facebook SDK合并到另一个应用程序中而没有单一问题.我能看到的唯一区别是这个项目已经有两个目标,而且(每个)这些警告只来自其中一个.任何人都可以告诉我如何为这四个文件制定构建规则吗?我需要armv6和armv7和i386的构建规则吗?

除了不同的-info.plist和不同的.pch文件外,构建设置完全相同.我应该补充说,facebook功能在模拟器上工作正常,但在使用任一构建目标的任何测试设备中都没有.

非常感谢.

iphone compiler-warnings build-rules

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

具有4个字节的"填充类'测试器'警告意味着什么?

对于这个简化的测试用例:

#include <map>

class Tester {
    int foo;
    std::map<int, int> smap;
};

int main() {
    Tester test; 
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我得到以下编译器警告:

$ clang++ -std=c++98 -Weverything test.cc 
test.cc:5:24: warning: padding class 'Tester' with 4 bytes to align 'smap' [-Wpadded]
    std::map<int, int> smap;
                       ^
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释这个警告意味着什么,以及我应该如何解决它?

c++ compiler-warnings clang++

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

在Swift 3中修复警告"不推荐使用C语言的语句"

我已更新Xcode到7.3,现在我对用于创建随机字符串的函数发出警告.

我试图改变for声明, for (i in 0 ..< len){...}但是警告变成了错误.

如何删除警告?

static func randomStringWithLength (len : Int) -> NSString {
  let letters : NSString = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
  let randomString : NSMutableString = NSMutableString(capacity: len)

  for (var i=0; i < len; i += 1){ // warning
    let length = UInt32 (letters.length)
    let rand = arc4random_uniform(length)
    randomString.appendFormat("%C", letters.characterAtIndex(Int(rand)))
  }
  return randomString
}
Run Code Online (Sandbox Code Playgroud)

for-loop compiler-warnings swift swift2

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

铸造到'void'真的有什么作用?

经常使用的语句(void)x;允许禁止有关未使用变量的警告x.但是如果我尝试编译以下内容,我会得到一些我不太了解的结果:

int main()
{
    int x;
    (short)x;
    (void)x;
    (int)x;
}
Run Code Online (Sandbox Code Playgroud)

用g ++编译它,我得到以下警告:

$ g++ test.cpp -Wall -Wextra -o test
test.cpp: In function ‘int main()’:
test.cpp:4:13: warning: statement has no effect [-Wunused-value]
     (short)x;
             ^
test.cpp:6:11: warning: statement has no effect [-Wunused-value]
     (int)x;
           ^
Run Code Online (Sandbox Code Playgroud)

因此,我得出结论,转换为void与任何其他类型的转换非常不同,是目标类型相同decltype(x)或不同的东西.我猜测可能的解释是:

  • 这只是一个惯例,(void)x;但其他演员不会抑制警告.所有陈述同样没有任何效果.
  • 这种差异在某种程度上与事实有关,而事实void x;并非如此short x;.

哪一项更正确?如果没有,那么如何解释编译器警告的差异?

c++ casting void compiler-warnings suppress-warnings

29
推荐指数
3
解决办法
1万
查看次数

有没有办法为函数指针比较生成警告?

我花了很长时间才发现我的代码中有一个错误被触发/OPT:ICF:

因为/ OPT:ICF可以将相同的地址分配给不同的函数或只读数据成员(使用/ Gy编译的const变量),它可以破坏依赖于函数或只读数据成员的唯一地址的程序.

(我一直在存储和比较函数指针的相等性,当链接器丢弃相同的函数时会断开这些指针.)

现在我需要找到我可能做过这样事情的每一个地方.

测试用例当然是微不足道的:

//MSVC: /Gy /link /OPT:ICF
int test1(void) { return 0; }
int test2(void) { return 0; }
int main(void) { return test1 == test2; }
Run Code Online (Sandbox Code Playgroud)

我试过-Wall,-Wextra,-Weverything,-pedantic,等,但他们没有产生警告.

是否有任何编译器选项或工具(无论是Visual C++,GCC,Clang还是其他部分)可以分析我的代码并告诉我在哪里比较函数指针,就像在上面的代码中一样?

c c++ function-pointers compiler-warnings comdat-folding

29
推荐指数
1
解决办法
800
查看次数