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));
}