ç警告在运行时关注的问题? [英] C warnings a concern at runtime?

查看:835
本文介绍了ç警告在运行时关注的问题?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

code,它是使用VS 2003,用于产生32位二进制建建没有一个单一的警告。

Code that was built using VS 2003 for generating 32 bit binary was built without a single warning.

同一code,没有一个单一的code修改,编译和链接成功使用Visual Studio 2010编译器生成64位二进制但下面列出的警告。

Same code , without a single code change, Compile and Link is successful using Visual studio 2010 compiler for generating 64 bit binary BUT with below list of warnings.

所以,我的问题是, 是在下面的列表中的任何警告,在运行时关注的问题?

So, My question is, Is any warning in the below list a concern at runtime ?

pcd.c(248) : warning C4996: 'getenv': This function or variable may be unsafe. Consider using _dupenv_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

pcd.c(377) : warning C4244: '=' : conversion from 'uintptr_t' to 'ULONG', possible loss of data

pcd.c(236) : warning C4100: 'argv' : unreferenced formal parameter


i.c(183) : warning C4100: 'lpReserved' : unreferenced formal parameter

api.c(506) : warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _stricmp. See online help for details.

api.c(554) : warning C4310: cast truncates constant value

api.c(719) : warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

api.c(2217) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

api.c(2892) : warning C4312: 'type cast' : conversion from 'ULONG_T' to 'HANDLE_T' of greater size

api.c(559) : warning C4702: unreachable code


stdio.h(234) : see declaration of 'fopen'


api.c(2217) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

prm.c(681) : warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
        C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\stdio.h(234) : see declaration of 'fopen'


host.c(410) : warning C4311: 'type cast' : pointer truncation from 'PVOID_T' to 'unsigned long'


stub.c(138) : warning C4295: 'eye' : array is too small to include a terminating null character


isv.c(372) : warning C4310: cast truncates constant value


chp.c(250) : warning C4244: '=' : conversion from 'SOCKET' to 'ULONG_T', possible loss of data

api.c(665) : warning C4311: 'type cast' : pointer truncation from 'HANDLE_T' to 'LONG'

api.c(1216) : warning C4057: 'function' : 'LPDWORD' differs in indirection to slightly different base types from 'LONG_T *'

hlp.c(1171) : warning C4057: 'function' : 'LPDWORD' differs in indirection to slightly different base types from 'LONG_T *'


neto.c(435) : warning C4057: 'function' : 'PLONG_T' differs in indirection to slightly different base types from 'ULONG_T *'


neto.c(595) : warning C4152: nonstandard extension, function/data pointer conversion in expression

neto.c(2115) : warning C4213: nonstandard extension used : cast on l-value

neto.c(2209) : warning C4057: 'function' : 'int *' differs in indirection to slightly different base types from 'LONG *'

td.c(760) : warning C4244: '=' : conversion from 'uintptr_t' to 'int', possible loss of data

td.c(2104) : warning C4054: 'type cast' : from function pointer 'FARPROC' to data pointer 'PVOID'

msc.c(287) : warning C4133: 'function' : incompatible types - from 'long *' to 'time_t *'


msc.c(1009) : warning C4702: unreachable code


inf.c(400) : warning C4057: 'function' : 'PLONG_T' differs in indirection to slightly different base types from 'ULONG *'

arb.c(166) : warning C4267: '=' : conversion from 'size_t' to 'LONG_T', possible loss of data

arb.c(226) : warning C4244: '=' : conversion from 'int' to 'CHAR_T', possible loss of data

sl.c(441) : warning C4054: 'type cast' : from function pointer 'int (__cdecl *)(unsigned char *,int,int,void *)' to data pointer 'void *'


pco.c(369) : warning C4057: 'function' : 'PLONG_T' differs in indirection to slightly different base types from 'ULONG_T *'

exit1.c(157) : warning C4295: 'publickey' : array is too small to include a terminating null 


env.c(341) : warning C4267: 'function' : conversion from 'size_t' to 'DWORD', possible loss of data

hook.c(221) : warning C4245: 'return' : conversion from 'int' to 'SOCKET', signed/unsigned mismatch

hook.c(817) : warning C4311: 'type cast' : pointer truncation from 'unsigned char *' to 'int'

tor.c(128) : warning C4244: 'function' : conversion from 'time_t' to 'unsigned int', possible loss of data


cth.c(1012) : warning C4244: '=' : conversion from '__int64' to 'int', possible loss of data


cntrl.c(427) : warning C4996: 'strnicmp': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _strnicmp. See online help for details.


api.c(263) : warning C4057: 'function' : 'int *' differs in indirection to slightly different base types from 'LONG_T *'

api.c(706) : warning C4057: 'function' : 'int *' differs in indirection to slightly different base types from 'DWORD *'

ii.c(252) : warning C4244: '=' : conversion from 'time_t' to 'long', possible loss of data

THX

推荐答案

有三种类型的警告:

  1. 有关不安全/日precated功能的警告。其中一些警告,你可能得到过,因为这些功能是不安全/不规范,也许去$ P $之前pcated。不过,如果你看看他们,并确保正确地使用(有记住,在64位的某些类型的大小变化),则可以继续使用它们。不过,我会尝试尽可能地使用标准功能。最起码,你应该关闭的警告个别如果你一定要正确使用的功能。

  1. Warnings about unsafe/deprecated functions. Some of these warnings you might have gotten before, since those functions were unsafe/nonstandard and maybe deprecated before. However, if you have a look at them and ensure to use them correctly (having in mind that the size of some types changes in 64bit), you can continue to use them. However, I'd try to use standard functions where possible. At the very least you should turn off the warnings individually if you are sure to use the functions correctly.

这之前应该也已经有警告,如未引用参数,符号/无符号不匹配,无法到达code和类似警告C4295,C4054,C4133一些讨厌的事情。你应该解决这些人,所有的。一些不是很严重(如符号/无符号不匹配),但也很容易解决,因此解决这些问题只是沉默的编译器。

Warnings that should've been there before too, such as "unreferenced parameters", signed/unsigned mismatches, unreachable code and some nasty things like warnings C4295, C4054, C4133. You should fix those, all of them. Some are not very grave (e.g. signed/unsigned mismatch), but also very easy to fix, so fix them just to silence the compiler.

从不同大小的64位Windows上用MSVC产生的警告。在32位的int,long,很长很长,指针为size_t等有32位大小。你可以将它们转换无缝,无数据丢失。然而,在64位,很长很长,为size_t和指针有64位的大小,而long和int保持32位。将它们转换可能会丢失信息,尤其是三分球都有涉及。尝试使用正确的类型,不要使用收缩转换。这也适用于各种类型定义的那些类型,例如PVOID,DWORD和所有那些类型定义WinAPI的使用只是为了有其他的名称相同的事情。

Warnings resulting from different sizes in 64bit on Windows with MSVC. In 32 bit, int, long, long long, pointers, size_t etc. have 32 bit size. You could convert them seamlessly, without data losses. However, in 64 bit, long long, size_t and pointers have 64 bit size, while long and int remain 32 bit. Converting them might lose information, especially if pointers are involved. Try to use the correct types, don't use narrowing conversions. That also applies for various typedefs to those types, e.g. PVOID, DWORD and all those typedefs WinAPI uses just to have other names for the same things.

在一般:警告是有原因的。尽量沉默编译器尽可能多地,通过参加每个单独的警告和应用appropiate更改code。如果你绝对必须做的转换,并确保他们不会影响你的程序的有效性,使用显式类型转换(即的static_cast 在大多数情况下)。这样可以确保你不会错过这暗示了真正愚蠢的错误,你会做一天是完全打破了整个程序,而不会被发现,直到调试后,长天单警告。我知道这是乏味的,尤其是在32/64位双平台编译,但它的价值在长期的工作。

In general: Warnings are there for a reason. Try to silence your compiler as much as possible, by attending each single warning and apply appropiate changes to the code. If you absolutely must do conversions and are sure they won't affect the validity of your program, use explicit casts (i.e. static_cast in most cases). By doing so you can be sure you don't miss the single warning that hints at the really stupid mistake you will do one day that completely breaks the whole program and that won't be found until after long days of debugging. I know it's tedious, especially on 32/64 bit dual platform compilation, but its worth the effort in the long term.

这篇关于ç警告在运行时关注的问题?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆