一直憋着想问的问题,main函数返回类型
用VS新建一个控制台程序,自动生成main函数,返回值类型为 int
那么我对两个相关API有所疑惑
BOOL WINAPI TerminateProcess(
_In_ HANDLE hProcess,
_In_ UINT uExitCode
);
BOOL WINAPI GetExitCodeProcess(
_In_ HANDLE hProcess,
_Out_ LPDWORD lpExitCode
);
明显的,3个地方的类型声明都不同,虽然大多数时候都是4字节(可能在某些架构或平台环境下字节长度不一样?)
微软为什么不把它们的类型设定为一样的呢?
[解决办法]
微软就是喜欢搞这些个玩意,很多东西查半天,结果一个void!
[解决办法]
记得有些情况是有历史原因的,比如95、98还是NT的系统,16位和32位是有差异的,所以就保留了2种定义。当初16位和32位是并存的,就像现在的32位和64位一样,不过32位上是没有差异的。但是因为使用广泛,所以淘汰16位系统后,没有改成统一的。
微软定义的东西,影响的人太多,而且又喜欢变来变去,把新手搞混乱,从很多地方都可以看得出来。总之,跟着微软走,处处需谨慎。
[解决办法]
int,UINT,DWORD都是相,
4个字节是心。
相由心生。
电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址;
人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……
[解决办法]
这个值传进去是保存在 EPROCESS 的 ExitStatus 里面的,这个值用windbg看是Int4B类型的。main函数返回还是交给ExitProcess处理的,现在windows就存在32位跟64位,所以你放心windows的 int、long明确的说明都是32位的,至于其他芯片其他架构,只要是能装上windows的长度都一样哈,附个win64的文档地址
http://www.microsoft.com/china/MSDN/library/Windev/64bit/issuesx64.mspx?mfr=true