#pragma warning
预编译指令#pragma有很多种用法,我敢保证很多程序员即使是一辈子也不会碰到其中的有些用法,是
的,他们的确很偏僻,我们也没有用他们的需求。所以,本文不会面面俱到,只是把几种常用的几种汇总
了一下。
1. #pragma once
保证头文件只被include一次,等同于
#ifndef _X_H
#define _X_H
...
#endif //_X_H
2.#pragma comment
原形是#pragma comment( "comment-type" [, commentstring] ),把comment recode放入目标文件或可
执行文件。"comment-type"有五种,其中lib比较常用:#pragma comment(lib,"d3d9x") 在连接时就会把
d3d9x.lib报含到项目中来。其实在IDE中也可以手动的设置把lib文件包含进来。
3.#pragma warning
可以对编译的warning做一些处理.
比如当把float 转成 int时会有一个warning.看到warning总归不爽,而且有些warning心知肚明,肯定不
会引起什么问题,这时候:
#pragma warning(disable:4244)
可以把该警告屏蔽掉.#pragma warning的作用域是本文件,如果是头文件,则会影响到包含它的模块,确保
你的使用不会影响到别人.所以最好及时地恢复warning
#pragma warning( push )
#pragma warning( disable : 4705 )
#pragma warning( disable : 4706 )
// Some code
#pragma warning( pop )
也可以
#pragma warning( disable : 4705 )
#pragma warning( disable : 4706 )
// Some code
#pragma warning( default: 4705 )
#pragma warning( default: 4705 )
4.#pragma pack
c/c++的class,struct,union默认情况下会在字,双字,四字边界对齐.有时候需要按我们的方式进行对齐,
比如让网络包更紧蹙些.
#pragma pack(push,1)
struct A{ //现在sizeof(A) 等于5;默认情况下是8;
int i;
char c;
};
#pragma pack(pop) 使用时跟warning一样,也要注意作用域问题。记得以前有位仁兄在头文件中改了对
齐方式,没有及时地设回去。这种bug很讨厌,会间歇性地莫名其妙地引起程序崩溃,千万要小心。
http://blog.csdn.net/hziee_/article/details/1786550
本节列出介于 C6000 和 C6999 之间的 C/C++ 代码分析警告。
![](http://i.msdn.microsoft.com/Global/Images/clear.gif)
警告编号 |
说明 |
---|---|
C6001 |
警告 C6001:使用未初始化的内存 <variable> |
C6011 |
警告 C6011:正在取消 NULL 指针 <name> 的引用 |
C6029 |
警告 C6029:对 <function> 的调用中可能会发生缓冲区溢出: 使用未经检查的值 |
C6031 |
警告 C6031:返回值被忽略: <function> 可能会返回意外的值 |
C6053 |
警告 C6053:对 <function> 的调用不能为字符串 <variable> 添加字符串零终止符 |
C6054 |
警告 C6054:字符串 <variable> 不能以零结尾 |
C6057 |
警告 C6057:<function> 调用中的字符数/字节数不匹配,造成缓冲区溢出 |
C6059 |
警告 C6059:<function> 调用中的长度参数不正确。应传递剩余字符数,而不是 <variable> 的缓冲区大小 |
C6063 |
警告 C6063:缺少 <function> 的字符串参数(对应于转换说明符 <number>) |
C6064 |
警告 C6064:缺少 <function> 的整型参数(对应于转换说明符 <number>) |
C6066 |
警告 C6066:传递了非指针参数 <number>,而对 <function> 的调用需要指针参数 |
C6067 |
警告 C6067:参数 <number> 在对 <function> 调用中必须是字符串的地址 |
C6200 |
警告 C6200:索引 <name> 超出了 <min> 至 <max> 的范围,即非堆栈缓冲区 <variable> 的有效索引范围 |
C6201 |
警告 C6201:<variable> 中缓冲区溢出,该缓冲区可能是在堆栈中分配的: 索引 <name> 超出了 <min> 至 <max> 的有效索引范围 |
C6202 |
警告 C6202:<variable> 在对 <function> 的调用中缓冲区溢出,该缓冲区可能是在堆栈中分配的: 长度 <size> 超过了缓冲区的大小 <max> |
C6203 |
警告 C6203:缓冲区 <variable> 在对 <function> 的调用中溢出: 长度 <size> 超过了缓冲区的大小 |
C6204 |
警告 C6204:对 <function> 的调用中可能发生了缓冲区溢出: 使用了未经检查的参数 <variable> |
C6209 |
警告 C6209:正在使用“sizeof <variable1>”作为参数 <number> 调用 <function>,其中 <variable2> 可能是一个宽字符数组,是否使用字符数而不是字节数? |
C6211 |
警告 C6211:由于出现异常,正在泄漏内存 <pointer>。应考虑使用局部 catch 块清理内存 |
C6214 |
警告 C6214:语义不同的整数类型之间的强制转换: HRESULT 转换为 Boolean 类型 |
C6215 |
警告 C6215:语义不同的整数类型之间的强制转换: Boolean 类型转换为 HRESULT |
C6216 |
警告 C6216:语义不同的整数类型之间由编译器插入的强制转换: Boolean 类型转换为 HRESULT |
C6217 |
警告 C6217:语义不同的整数类型之间的隐式强制转换: 使用“not”测试 HRESULT。应考虑改用 SUCCEEDED 或 FAILED 宏 |
C6219 |
警告 C6219:语义不同的整数类型之间的隐式强制转换: 将 HRESULT 与 1 或 TRUE 进行比较。应考虑改用 SUCCEEDED 或 FAILED 宏 |
C6220 |
警告 C6220 - 语义不同的整数类型之间的隐式强制转换: 将 HRESULT 与 -1 进行比较。应考虑改用 SUCCEEDED 或 FAILED 宏 |
C6221 |
警告 C6221:语义不同的整数类型之间的隐式强制转换: 将 HRESULT 与一个整数进行比较。应考虑改用 SUCCEEDED 或 FAILED 宏 |
C6225 |
警告 C6225:语义不同的整数类型之间的隐式强制转换: 将 1 或 TRUE 赋给 HRESULT。应考虑改用 S_FALSE |
C6226 |
警告 C6226:语义不同的整数类型之间的隐式强制转换: 将 -1 赋给 HRESULT。应考虑改用 E_FAIL |
C6230 |
警告 C6230:语义不同的整数类型之间的隐式强制转换: 在 Boolean 上下文中使用 HRESULT |
C6235 |
警告 C6235:(<non-zero constant> || <expression>)始终为非零常数 |
C6236 |
警告 C6236:(<expression> || <non-zero constant>)始终为非零常数 |
C6237 |
警告 C6237:(<zero> && <expression>)始终为零。任何情况下都不会计算其中的 <expression>,且可能具有负面影响 |
C6239 |
警告 C6239:(<non-zero constant> && <expression>)的值始终等于 <expression> 的计算结果。是否希望使用按位与运算符? |
C6240 |
警告 C6240:(<expression> && <non-zero constant>)的值始终等于 <expression> 的计算结果。是否希望使用按位与运算符? |
C6242 |
警告 C6242:从此 try 块中跳转将强制展开局部堆栈。这样会严重影响性能 |
C6244 |
警告 C6244:<variable> 的局部声明遮蔽了此前位于 <line> 行(<file> 中)的声明 |
C6246 |
警告 C6246:<variable> 的局部声明遮蔽了外部作用域中具同名的声明。附加信息: 请参见此前位于 <location> 的声明。 |
C6248 |
警告 C6248:将 SECURITY_DESCRIPTOR 的 DACL 设置为 NULL 将产生一个不受保护的对象 |
C6250 |
警告 C6250:不使用 MEM_RELEASE 标志调用 <function> 可能会释放内存,但不会释放地址说明符 (VAD);这样会导致地址空间泄漏 |
C6255 |
警告 C6255:_alloca 通过引发堆栈溢出异常表明失败。应考虑改用 _alloca_s |
C6258 |
警告 C6258:使用 TerminateThread 将不允许进行相应的线程清理 |
C6259 |
警告 C6259:无法访问带标签的代码: switch 表达式中的(<expression> & <constant>)不能计算为 <case-label> |
C6260 |
警告 C6260:sizeof * sizeof 在绝大部分情况下是错误的,打算使用字符数还是字节数? |
C6262 |
警告 C6262:函数使用了堆栈中的 <constant> 个字节: 超过了 /analyze:stacksize<constant>。请考虑将某些数据移到堆中 |
C6263 |
警告 C6263:在循环中使用 _alloca: 这样会很快造成堆栈溢出 |
C6268 |
警告 C6268:错误的运算顺序: (<TYPE1>)(<TYPE2>)x + y。(<TYPE1>)((<TYPE2>)x + y)中可能缺少括号 |
C6269 |
警告 C6269:运算顺序可能不正确: 取消引用被忽略 |
C6270 |
警告 C6270:缺少 <function> 的浮点型参数: 添加一个对应于转换说明符 <number> 的浮点型参数 |
C6271 |
警告 C6271:向 <function> 传递了额外参数: 参数 <number> 未由格式字符串使用 |
C6272 |
警告 C6272:传递了非浮点型参数 <number>,而对 <function> 的调用需要浮点型参数 |
C6273 |
警告 6273:传递了非整型参数 <number>,而对 <function> 的调用需要整型参数: 如果当前传递的是一个指针值,应使用 %p |
C6274 |
警告 C6274:传递了非字符型参数 <number>,而对 <function> 的调用需要字符型参数 |
C6276 |
警告 C6276:语义不同的字符串类型之间的强制转换: char* 到 wchar_t*。使用无效的字符串会导致未定义的行为 |
C6277 |
警告 C6277:在对 <function> 的调用中使用的 NULL 应用程序名含未加引号的路径: 如果路径中包含空格将导致安全漏洞 |
C6278 |
警告 C6278:<variable> 使用数组 new [] 分配,但使用标量 delete 删除。析构函数将不被调用 |
C6279 |
警告 C6279:<variable> 使用标量 new 分配,但使用数组 delete [] 删除 |
C6280 |
警告 C6280:<variable> 使用 <function> 分配,但使用 <function> 删除 |
C6281 |
警告 6281 - 运算顺序不正确: 关系运算符的优先级高于位运算符 |
C6282 |
警告 C6282:运算符不正确: 在 Boolean 上下文中执行了常数赋值。应考虑改用“==” |
C6283 |
警告 C6283:<variable> 使用数组 new [] 分配,但使用标量 delete 删除 |
C6284 |
警告 C6284:传递了对象参数“%d”,而对 <function> 的调用需要字符串参数。 |
C6285 |
警告 C6285:(<non-zero constant> || <non-zero constant>)的值始终为非零常数。是否希望使用按位与运算符? |
C6286 |
警告 C6286:(<non-zero constant> || <expression>)始终为非零常数。任何情况下都不会计算其中的 <expression>,且可能具有负面影响 |
C6287 |
警告 C6287:冗余代码: 左右两侧的子表达式完全相同 |
C6288 |
警告 C6288:运算符不正确: 基于 && 的相同运算始终为 0。是否希望改用 ||? |
C6289 |
警告 C6289:运算符不正确: 基于 || 的互斥运算为非零常数。是否希望改用 &&? |
C6290 |
警告 C6290:对逻辑结果的位运算: !的优先级高于 &。应改用 && 或 (!(x & y)) |
C6291 |
警告 C6291:对逻辑结果的位运算: !的优先级高于 |。应改用 || 或 (!(x | y)) |
C6292 |
警告 C6292:for 循环定义错误: 从最大值开始向上计数 |
C6293 |
警告 C6293:for 循环定义错误: 从最小值开始向下计数 |
C6294 |
警告 C6294:for 循环定义错误: 初始条件不满足测试。循环体未执行 |
C6295 |
警告 C6295:for 循环定义错误: <variable> 值始终介于“min”到“max”范围之间。循环将无限执行 |
C6296 |
警告 C6296:for 循环定义错误: 循环体仅执行一次 |
C6297 |
警告 C6297:算术溢出: 对 32 位值进行移位操作,然后强制转换为 64 位值。可能得到非预期的结果值 |
C6298 |
警告 C6298:将只读字符串 <pointer> 用作可写字符串参数: 这样会导致尝试写入静态只读内存并造成随机性崩溃 |
C6299 |
警告 C6299:对一个位字段和 Boolean 类型进行显式比较会产生意外的结果 |
C6302 |
警告 C6302:格式字符串不匹配: 传递了字符字符串参数 <number>,而对 <function> 的调用需要宽字符字符串参数 |
C6303 |
警告 C6303:格式字符串不匹配: 传递了宽字符字符串参数 <number>,而对 <function> 的调用需要字符字符串参数 |
C6305 |
警告 C6305:sizeof 和 countof 量值之间可能不一致 |
C6306 |
警告 C6306:不正确的 <function> 调用: 应考虑使用接受 va_list 作为参数的 <function> |
C6308 |
警告 C6308:“realloc”可能返回 null 指针: 将 null 指针赋给 <variable> (后者将作为参数传递给“realloc”)将导致原始内存块泄漏 |
C6309 |
警告 C6309:参数 <number> 为 null: 这不符合 <function> 的函数规范 |
C6310 |
警告 C6310:异常筛选器中的非法常数会导致意外的行为 |
C6312 |
警告 C6312:可能是无限循环: 在一个 try-except 的异常筛选器表达式中使用常数 EXCEPTION_CONTINUE_EXECUTION |
C6313 |
警告 C6313:运算符不正确: 不能使用按位与来测试零值标志。应使用相等测试来检查零值标志 |
C6314 |
警告 C6314:运算顺序不正确: 按位或的优先级高于条件表达式运算符。请使用括号明确指定优先级 |
C6315 |
警告 C6315:运算顺序不正确: 接位与的优先级高于按位或。请使用括号明确指定优先级 |
C6316 |
警告 C6316:运算符不正确: 被测试的表达式为非零常数。请使用按位与确定是否设置相应的位 |
C6317 |
警告 C6317:运算符不正确: 逻辑非(!)与 1 的补数(~)不可互换 |
C6318 |
警告 C6318:__try/__except 未正确定义: 在异常筛选器表达式中使用了常数 EXCEPTION_CONTINUE_SEARCH 或另一个计算结果为 0 的常数。异常处理程序块中的代码将不会执行 |
C6319 |
警告 C6319:在被测试的表达式中使用了逗号运算符,导致左侧的参数在无副作用时被忽略 |
C6320 |
警告 C6320:异常筛选器表达式为常数 EXCEPTION_EXECUTE_HANDLER。这样可能会屏蔽不打算处理的异常 |
C6322 |
警告 C6322:空的 _except 块 |
C6323 |
警告 C6323:对一个或多个 Boolean 类型使用算术运算符 |
C6324 |
警告 C6324:<函数 1> 的使用可能不正确: 是否希望使用 <函数 2>? |
C6326 |
警告 C6326:可能对两个常数进行比较 |
C6327 |
警告 C6327:可能出现缓冲区溢出: SysAllocStringLen 复制 <number> 个字符(从字符串 <variable>),而未验证要复制的字符数。代码可能崩溃 |
C6328 |
警告 C6328:已将 <type> 作为参数 <number> 传递,而需要使用 <type> 调用 <function> |
C6331 |
警告 C6331:无效的参数: 不允许将 MEM_RELEASE 和 MEM_DECOMMIT 与 <function> 一起传递。这会导致此调用失败 |
C6332 |
警告 C6332:无效的参数: 不允许将 0 作为 dwFreeType 参数传递给 <function>。这会导致此调用失败 |
C6333 |
警告 C6333:无效的参数: 不允许将 MEM_RELEASE 和非零 dwSize 参数一起传递给 <function>。这会导致此调用失败 |
C6334 |
警告 C6334:将 sizeof 运算符应用于带有运算符的表达式可能产生意外的结果 |
C6335 |
警告 C6335:泄漏进程信息句柄 <handlename> |
C6336 |
警告 C6336:算术运算符的优先级高于问号运算符,请使用括号明确指定优先级 |
C6381 |
警告 C6381:Shutdown API <function> 需要一个有效的 dwReason 或 lpMessage |
C6383 |
警告 C6383:将元素数转换为字节数造成缓冲区溢出: 需要使用元素数作为参数 <number> 调用 <function> |
C6384 |
警告 C6384:用另一值除指针的 sizeof 值 |
C6385 |
警告 C6385:无效的数据: 访问 <buffer name> 时,<size1> 个字节可读,但可能读取了 <size2> 个字节: 行: x, y |
C6386 |
警告 C6386:缓冲区溢出: 访问 <buffer name> 时,<size1> 个字节可写,但可能写入了 <size2> 个字节: 行: x, y |
C6387 |
警告 C6387:<argument> 可能是 <value>: 这不符合函数 <function name> 的规范: 行: x, y |
C6388 |
警告 C6388:<argument> 不能是 <value>: 这不符合函数 <function name> 的规范: 行: x, y |
C6400 |
警告 C6400:使用 <function name> 执行与常数字符串 <string name> 的不区分大小写的比较。这样会在非英语区域设置中产生意外结果 |
C6401 |
警告 C6401:在默认区域设置中使用 <function name> 执行与常数字符串 <string name> 的不区分大小写的比较。这样会在非英语区域设置中产生意外结果 |
C6500 |
警告 C6500:无效的批注: <name> 属性的值无效 |
C6501 |
警告 C6501:批注冲突: <name> 属性与以前指定的属性冲突 |
C6503 |
警告 C6503:批注冲突: 引用不可标记为 Null=Yes 或 Null=Maybe |
C6504 |
警告 C6504:无效的批注: 属性只能用于指针值、指向成员的指针值或数组类型值 |
C6505 |
警告 C6505:无效的批注: MustCheck 属性不可用于 void 类型的值 |
C6506 |
警告 C6506:无效的批注: <name> 属性只能用于指针值或数组类型值 |
C6507 |
警告 C6507:批注冲突: 后置条件中 Deref=0 处的 Null 属性必须是前置条件中 Null 属性的一个子集 |
C6508 |
警告 C6508:无效的批注: 不允许对 const 值执行写访问 |
C6509 |
警告 C6509:无效的批注: 不能从前置条件引用“return” |
C6510 |
警告 C6510:无效的批注: NullTerminated 属性只能用于指针值或数组类型值 |
C6511 |
警告 C6511:无效的批注: MustCheck 属性必须为 Yes 或 No |
C6512 |
警告 C6512:无效的批注: 如果 Valid 属性为 No,Null 属性必须为 Maybe |
C6513 |
警告 C6513:无效的批注: ElementSizeConst 需要额外的大小属性 |
C6514 |
警告 C6514:无效的批注: <name> 属性的值超出了数组的大小 |
C6515 |
警告 C6515:无效的批注: <name> 属性只能用于指针类型的值 |
C6516 |
警告 C6516:无效的批注: 没有为 <name> 特性指定属性 |
C6517 |
警告 C6517:批注冲突: 不能在不可读的缓冲区上指定 ValidElementsConst 和 ValidBytesConst |
C6518 |
警告 C6518:批注冲突: 不能在不可写的缓冲区上指定 WriteableElementsConst 和 WriteableBytesConst |
C6521 |
警告 C6521:大小规格无效: * 运算符只能用于指针类型 |
C6522 |
警告 C6522:大小规格无效: 表达式必须为整型 |
C6523 |
警告 C6523:大小规格无效: 未找到参数 <name> |
C6525 |
警告 C6525: 大小规格无效: 属性值可能无效 |
C6526 |
警告 C6526:大小规格无效: 表达式必须为数组类型或指针类型 |
C6530 |
警告 6530:无法识别的格式字符串样式 <name> |
C6535 |
警告 C6535:缓冲区的大小不能为 <n>,大于 max(size_t) |
#pragma warning相关推荐
- C++写#pragma warning(disable 4786)的作用
C++编程时,在使用STL(C++标准模板库)的时候经常引发类似的错误,尤其是vector,map这类模板类,模板中套模板,一不小心就很长了. 当命名超过C++规定范围255字符时,就会产生这个名为d ...
- #pragma warning(pop) 和 #pragma warning(push)的作用
#pragma warning(push)是保存当前的编译器警告状态: #pragma warning(pop)是恢复原先的警告状态. 例如: #pragma warning( push ) #pra ...
- 预处理指令pragma常见用法集锦(#pragma once、#pragma comment和#pragma warning)
#pragma once: 这是一个比较常用的指令,只要在头文件的最开始加入这条指令就能够保证头文件被编译一次,避免文件被重复包含. ********************************* ...
- 关闭VS警告#pragma warning(disable:4996)
代码实现: #pragma warning(disable:4996) 1. #pragma warning只对当前文件有效(对于.h,对包含它的cpp也是有效的),而不是对整个工程的所有文件有效.当 ...
- C++ 中的 #pragma warning(push) 和 #pragma warning(pop)有什么用
#pragma warning(push)是保存当前的编译器警告状态: #pragma warning(pop)是恢复原先的警告状态. 例如:rocksdb中的一段代码 #if defined(_M ...
- 程序关闭时在#pragma warning(suppress: 4985)处中断
程序在关闭以及某些运行的时候,在#pragma warning(suppress: 4985)里面中断了,一直没有找到问题的所在,在注销掉所有刚写的代码后,还是没有解决. 思考原因:可能是刚刚替换了V ...
- #pragma warning 启用和禁用warning
开发人员可以使用 #pragma 指令将警告作为错误处理:还可以启用或禁用警告,如下面的示例所示: 1.将一个warning作为一个错误 #pragma warning (error: 6260) 2 ...
- pragma warning
1 常用去警告: #pragma warning(disable:4035) //no return value #pragma warning(disable:4068) // ...
- #pragma warning(disable:4996)是啥?
文章目录 含义:忽略warning4996 扩展:#pragma warning #pragma warning其他用法 含义:忽略warning4996 在使用VS 的开发者会遇到这样的问题,在使用 ...
- #pragma warning (disable:4200)什么意思?(清除VS工程的警告方法)
如果项目中的烦人警告太多,可用此方法清除. 关于#pragma warning1.#pragma warning只对当前文件有效(对于.h,对包含它的cpp也是有效的),而不是是对整个工程的所有文件有 ...
最新文章
- mysql 按小时分组统计_PowerBI业务分析:按排名分组统计
- 完全详解--Silverlight 下载文件
- 也论PageController/FrontController与MVC
- OpenCV不规则ROI提取
- mysql 数据查询优化_优化MySQL数据库查询的三种方法
- 生成core文件的步骤
- mysql hibernate 分页查询_Hibernate + MySQL 分页类的实现
- 二分法之旋转有序数组
- VS报错:“Stack around the variable XX was corrupted”
- springboot优雅的加载海康sdk
- c语言资产管理系统设计报告,(C)固定资产管理系统论文
- 20120329_dmp 文件导入ibm p750-2个LPAR 小机知识点
- 常用MATLAB工具箱下载地址
- 戴尔笔记本重装系统硬盘加密怎么解除
- 2021财院ACM选拔赛题解
- Pyton IO编程
- 计算机无法屏幕亮度,电脑更新windows 10 四月更新1803后,笔记本电脑亮度无法调节。...
- green power 设备入网过程
- 基于V4L2的视频驱动开发(2) 华清远见 刘洪涛
- Solidworks设计电路外形导入AltiumDesigner
热门文章
- 南工大计算机学院的信息化现状,对我校信息化建设现状的分析及发展建议.doc...
- 写个单片机软件工程师的简历
- 最近使用百度地图的一点心得
- 安科瑞DJSF1352系列直流电能表,可通过RS485接口与微机进行数据交换,并具有电能测量、数据处理、实时监测等功能
- 计算机与科学技术暑期社会实践,计算机学院暑期社会实践活动圆满结束
- 「数据架构」:主数据管理 (MDM)概览和为什么选择主数据管理
- 数据操作语言:连接查询-外连接
- HTTP协议与TCP协议简单理解--转自博客园--留着学习
- 【科创人+极客邦科技】百企贡献资源,携手抗击疫情
- [Unity设计模式与游戏开发]工厂模式