UPD。所以我刚才意识到这实际上是非常愚蠢的想法,因为据我所知,没有办法改变消极的"溢出"数字到字符串,除非以某种方式禁止编译器显示" - "在数字之前。
这是我的第一个消息,所以请原谅我是否有错误。 所以,从第一周的讲座中获得了这个基本代码。
int main(void)
{
int n = 1;
for (int i = 0; i < 64; i++)
{
printf("n is %i\n", n);
n = n * 2;
}
}
我一直在考虑分配字符串n以便通过-2亿。
int main(void)
{
int n = 1;
for (int i = 0; i < 64; i++)
{
printf("n is %i\n", n);
n = n * 2;
if (n < 0){
string n = get_string();
printf("n is %s\n", n);
}
}
}
它会出错:declaration shadows a local variable
。有没有办法来解决这个问题?感谢。
答案 0 :(得分:1)
您可以执行以下操作以不显示此警告:
n
两次声明变量,即使用任何其他名称重命名int n
或string n
。-Wshadow
编译器切换。答案 1 :(得分:0)
使用更大的类型可以避免32位溢出:unsigned long long
保证至少有64位值:
#include <stdio.h>
int main(void) {
unsigned long long n = 1;
for (int i = 0; i < 64; i++) {
printf("n is %llu\n", n);
n = n * 2;
}
return 0;
}