预编译指令#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++ 代码分析警告。

 本节内容

警告编号

说明

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相关推荐

  1. C++写#pragma warning(disable 4786)的作用

    C++编程时,在使用STL(C++标准模板库)的时候经常引发类似的错误,尤其是vector,map这类模板类,模板中套模板,一不小心就很长了. 当命名超过C++规定范围255字符时,就会产生这个名为d ...

  2. #pragma warning(pop) 和 #pragma warning(push)的作用

    #pragma warning(push)是保存当前的编译器警告状态: #pragma warning(pop)是恢复原先的警告状态. 例如: #pragma warning( push ) #pra ...

  3. 预处理指令pragma常见用法集锦(#pragma once、#pragma comment和#pragma warning)

    #pragma once: 这是一个比较常用的指令,只要在头文件的最开始加入这条指令就能够保证头文件被编译一次,避免文件被重复包含. ********************************* ...

  4. 关闭VS警告#pragma warning(disable:4996)

    代码实现: #pragma warning(disable:4996) 1. #pragma warning只对当前文件有效(对于.h,对包含它的cpp也是有效的),而不是对整个工程的所有文件有效.当 ...

  5. C++ 中的 #pragma warning(push) 和 #pragma warning(pop)有什么用

    #pragma warning(push)是保存当前的编译器警告状态:  #pragma warning(pop)是恢复原先的警告状态. 例如:rocksdb中的一段代码 #if defined(_M ...

  6. 程序关闭时在#pragma warning(suppress: 4985)处中断

    程序在关闭以及某些运行的时候,在#pragma warning(suppress: 4985)里面中断了,一直没有找到问题的所在,在注销掉所有刚写的代码后,还是没有解决. 思考原因:可能是刚刚替换了V ...

  7. #pragma warning 启用和禁用warning

    开发人员可以使用 #pragma 指令将警告作为错误处理:还可以启用或禁用警告,如下面的示例所示: 1.将一个warning作为一个错误 #pragma warning (error: 6260) 2 ...

  8. pragma warning

    1  常用去警告: #pragma warning(disable:4035) //no return value          #pragma warning(disable:4068) // ...

  9. #pragma warning(disable:4996)是啥?

    文章目录 含义:忽略warning4996 扩展:#pragma warning #pragma warning其他用法 含义:忽略warning4996 在使用VS 的开发者会遇到这样的问题,在使用 ...

  10. #pragma warning (disable:4200)什么意思?(清除VS工程的警告方法)

    如果项目中的烦人警告太多,可用此方法清除. 关于#pragma warning1.#pragma warning只对当前文件有效(对于.h,对包含它的cpp也是有效的),而不是是对整个工程的所有文件有 ...

最新文章

  1. mysql 按小时分组统计_PowerBI业务分析:按排名分组统计
  2. 完全详解--Silverlight 下载文件
  3. 也论PageController/FrontController与MVC
  4. OpenCV不规则ROI提取
  5. mysql 数据查询优化_优化MySQL数据库查询的三种方法
  6. 生成core文件的步骤
  7. mysql hibernate 分页查询_Hibernate + MySQL 分页类的实现
  8. 二分法之旋转有序数组
  9. VS报错:“Stack around the variable XX was corrupted”
  10. springboot优雅的加载海康sdk
  11. c语言资产管理系统设计报告,(C)固定资产管理系统论文
  12. 20120329_dmp 文件导入ibm p750-2个LPAR 小机知识点
  13. 常用MATLAB工具箱下载地址
  14. 戴尔笔记本重装系统硬盘加密怎么解除
  15. 2021财院ACM选拔赛题解
  16. Pyton IO编程
  17. 计算机无法屏幕亮度,电脑更新windows 10 四月更新1803后,笔记本电脑亮度无法调节。...
  18. green power 设备入网过程
  19. 基于V4L2的视频驱动开发(2) 华清远见 刘洪涛
  20. Solidworks设计电路外形导入AltiumDesigner

热门文章

  1. 南工大计算机学院的信息化现状,对我校信息化建设现状的分析及发展建议.doc...
  2. 写个单片机软件工程师的简历
  3. 最近使用百度地图的一点心得
  4. 安科瑞DJSF1352系列直流电能表,可通过RS485接口与微机进行数据交换,并具有电能测量、数据处理、实时监测等功能
  5. 计算机与科学技术暑期社会实践,计算机学院暑期社会实践活动圆满结束
  6. 「数据架构」:主数据管理 (MDM)概览和为什么选择主数据管理
  7. 数据操作语言:连接查询-外连接
  8. HTTP协议与TCP协议简单理解--转自博客园--留着学习
  9. 【科创人+极客邦科技】百企贡献资源,携手抗击疫情
  10. [Unity设计模式与游戏开发]工厂模式