博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++常见问题之一void&null&0
阅读量:4946 次
发布时间:2019-06-11

本文共 1620 字,大约阅读时间需要 5 分钟。

一. 先从void说起

   void 顾名思义,空的意思,在编写C++程序入口函数main的时候,我们经常会看到这样的代码:

void main(){//some code...}

      在VC++平台中是可以正确编译,链接,执行的,但是在Linux环境下却会产生异常,这里会是怎么回事呢?原因恐怕有二。

      其一:市面上一些经典书籍的误导,一个非常有代表性的就是谭浩强的C程序设计。当我后来接触到一些国外经典书籍的时候发现该书在一些概念上有太多歧义,不建议初学者使用该书籍,可以用C++编程思想等经典书籍。

      其二:微软对于这种行为的过度纵容,导致很多编程人员认为这也是合理的,但是首先我们要清楚在C/C++中从来就没有void main()这样的代码形式,C++之父Bjarne Stroustrup曾经明确的指出:在C++中绝对没有出现过void main(){}这样的函数定义,在C语言中也是。

      虽然在C/C++标准中并不支持void main(),但是在一些编译器中还是会通过编译执行的,比如微软的VC++,由于VC++平台受众众多,因此这一不良风气一直在蔓延,但是在gcc中,这是无法通过编译的,因此强烈建议使用标准中的定义:

int main(void){   //some code.....   return  0;    }int main(int argc,char *argv[]){//some codereturn 0;}

        使用标准的一个最大的好处就是消除了当把程序从一个编译器平台转移到另一个编译器平台的时候可能出现的编译错误。

二.0的几种形态

1.整形0

      作为一个int类型,其占据了32位的空间,其余无需多说

2.空指针NULL

      NULL是一个宏,表示空指针常量,我们看一下其在windef.h中的定义:

#ifndef NULL#ifdef  _cplusplus#define  NULL 0#else#define  NULL  ((void *)0)#endif#endif

       需要注意的是,这里的0与整数还是有区别的,因为这里的NULL除了可以表示0还可以是地址,也即这里的0扩大了其他整数无法办到的范围,如下:

       int * pnum=0;//这是合法的

       int* pnum=1;//这是非法的

3.字符串结束标志’\0’

         字符’\0’,仅仅作为一个字符,其占8位,在C++中唯一用作字符串结束标志,通常来说,我们在这里要注意的就是字符的空间要比length要多一位

4.逻辑false/FALSE

       在这里有一点需要注意,也即falseFALSE的区别,可能我们在使用的过程中丝毫没有觉得有何差异,但是其内在构成是不同的。我们可以做一个简单的实验:

C++中我们可以通过库函数typeid(a)来判断变量a的类型,该函数位于#include <typeinfo.h>中:我们看下面的一段代码,这里的问题立马就解决了。

#include 
#include
#include
#include
int main(void){if (typeid(false)==typeid(FALSE))std::cout<<"false&FALSE are equally!"<
<<"false&FALSE are not equally!"<

 

       从这里我们可以看出falseFALSE是不同的,其实falseC++标准后来增加的,而FALSE则是宏,是整型,占4个字节,而false则是bool,只占1个字节,这一点要切记。

 

 

 

 

 

转载于:https://www.cnblogs.com/ainima/p/6331135.html

你可能感兴趣的文章
Windows 下手工搭建 LNMP 环境
查看>>
【ASP.NET】从服务器端注册客户端脚本
查看>>
C语言 memcpy二维数组的复制
查看>>
Infix to Postfix Expression
查看>>
win7任务栏还原为xp样式
查看>>
maven在windows及linux环境下安装
查看>>
【一头扎进JMS】(3)----ActiviteMQ点对点消息实现+消息监听
查看>>
Ubuntu安装python虚拟环境以及apt-get和pip源更换
查看>>
ORG 07C00H的意思
查看>>
BZOJ1036;[ZJOI2008]树的统计
查看>>
激活码
查看>>
php 获取优酷视频的真实地址(2014.6月新算法)
查看>>
SQL数据库知识二(Day 25)
查看>>
WPF 入门笔记之事件
查看>>
Win7 64位硬盘安装Ubuntu 64位的细微配置
查看>>
keystore和truststore
查看>>
【Luogu】P3396哈希冲突(根号算法)
查看>>
ready与onload的性能
查看>>
matlab(5) : 求得θ值后用模型来预测 / 计算模型的精度
查看>>
第4章 类与对象 类和对象
查看>>