欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C++控制台闪回;编译器警告C4305,C4244

程序员文章站 2023-02-03 12:32:09
这是我以前解决问题时,收集在印象笔记里的内容,为了以后整理方便,把它转移至这里。以下内容,均来自微软官方网站相关。 问题:C++控制台闪回 解决办法: 1,在程序结尾添加system("pause");[若有return语句则写在return之前] 解析:system(const char *com ......
这是我以前解决问题时,收集在印象笔记里的内容,为了以后整理方便,把它转移至这里。以下内容,均来自微软官方网站相关。
 
 
问题:c++控制台闪回
 
 
解决办法:
1,在程序结尾添加system("pause");[若有return语句则写在return之前]
解析:system(const char *command);
system函数返回给定的命令字符串command进行系统调用。如果命令执行正确通常返回零值。如果command为null,system()将尝试是否有可用的命令解释器。如果有返回非零值,否则返回零值。
system是执行dos下面的一些命令,在dos下能执行的指令,用system都可以执行。把dos的命令直接放到它的参数里面就可以执行,用户随意敲一个键后程序继续运行。
pause 它会提示“请按任意键继续……”,pause命令没有任何的参数,它的命令就是它的本身,当pause命令运行后,会中断执行语句。这个中断不是立即停止,只是暂停,按下任意键之后就会继续执行下面的语句。而且可以重复用很多次,在一个批处理命令中,可以尝试使用多个pause命令。
2,在程序结尾添加get char();[若有return语句则写在return之前]
解析:get char()函数从stdin(标准输入)获取并返回下一个字符,如果到达文件尾返回eof。这种方法是直接让程序运行get char函数,让程序在接受一个字符后再退出,相当于自己按下任意键后程序才退出。
 
 
编译器警告(等级1)c4305
 
 
“context”:从"type1"到"type2"的截断
备注:如果将值转换为较小类型的初始化或构造函数参数,则会发出此警告,导致信息丢失。
示例
此示例显示了你可能会看到此警告的两种方式:
// c4305.cpp
// compile by using: cl /ehsc /w4 c4305.cpp
 
struct item
{
    item(float) {}
};
 
int main()
{
    float f = 2.71828;          // c4305 'initializing'
    item i(3.14159);            // c4305 'argument'
    return static_cast<int>(f);
}
 
 
若要解决此问题,请使用正确类型的值进行初始化,或使用显式强制转换为正确的类型。 例如,使用浮点文本(如 2.71828 f),而不是双精度(浮点文本的默认类型)来初始化浮点变量,或传递给采用float参数的构造函数。
 
 
编译器警告(等级2) c4244
 
 
"argument":从 "type1" 转换到 "type2",可能丢失数据
浮点类型已转换为整数类型。 可能发生了数据丢失。
如果收到 c4244,则应将程序更改为使用兼容类型,或向代码添加一些逻辑,以确保可能值的范围将始终与你使用的类型兼容。
c4244 也可以在第3级和第4级激发;有关详细信息,请参阅编译器警告(等级3和4) c4244 。
示例
下面的示例生成 c4244:
c++
// c4244_level2.cpp
// compile with: /w2
 
int f(int x){ return 0; }
int main() {
   double x = 10.1;
   int i = 10;
   return (f(x));   // c4244
   // try the following line instead
   // return (f(i));
}