auto.cpp: In function ‘int autooo(unsigned int)’:
auto.cpp:33:25: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
我正在做makefile,我已经运行了makefile并制作了一个auto.o但是我仍然遇到这个错误,下面是我的autooo.cpp,auto.h
我不知道未签名和签名的内容:\请帮助
auto.h
#ifndef function_H_
#define function_H_
int autooo(unsigned);
int interr(unsigned);
#endif /* function_H_ */
autooo.cpp
#include <iostream>
#include <cstdlib> //for random functions
#include "prime.h"
#include "auto.h"
using namespace std;
#ifndef auto_CPP_
#define auto_CPP_
int autooo(unsigned);
int autooo(unsigned a)
{
int b=50;
unsigned numberFound = 0;
do
{
++a;
if (isPrime(a))
{
++numberFound;
cout << a << "is prime number" <<endl;
}
} while (numberFound < b);
return 0;
}
#endif
答案 0 :(得分:2)
编译器警告该代码包含行中unsigned int
与signed int
的比较
while (numberFound < b);
这与makefile或make无关。
您可以通过更改
来解决这个问题int b=50;
到
unsigned b = 50;
或通过更改
unsigned numberFound = 0;
到
int numberFound = 0;
在this answer to another SO question
中解释了在比较signed int
和unsigned int
时可能遇到的问题
答案 1 :(得分:0)
在这一行
while (numberFound < b);
第一个是unsigned int
,第二个是int
。所以你必须使它们成为相同的类型,或者如果你完全确定它们中的一个。
正如Etan评论的那样:
&#34;盲目地抛弃警告只是为了避免警告是一个错误。您需要了解警告告诉您的内容并确定正确的修复方法。&#34;
答案 2 :(得分:0)
您收到有关比较有符号和无符号类型的警告,因为有符号和无符号整数的范围不同。 如果你必须进行这样的比较,你应该明确地将其中一个值转换为与另一个值兼容,但需要检查以确保你的强制转换有效。
例如: -
int i = someIntValue();
if (i >= 0)
{
// i is non-negative, so it is safe to compare to unsigned value
if ((unsigned)i >= u)
// do something
}
答案 3 :(得分:0)
它说你正在比较两种不同的东西。最值得注意的是,一个范围不适合另一个范围。
是的,我在那里。存在无符号范围内的数字,不能表示为有符号数字答案 4 :(得分:-1)
在比较已签名和未签名的代码之前键入代码以避免警告
int a;
unsigned int b;
if(a==b) gives warning
if(a == (int)b)
将解决您的问题
盲目投射会导致一些意想不到的结果
警告是因为有符号和无符号的范围不同。
当用于比较的有符号整数大于零时,转换将正常工作。
所以在比较之前检查有符号整数是否大于零
更多信息here