C/C++中void的作用,C/C++的语法对函数的一些影响
来源:互联网 发布:怎么导入淘宝数据包 编辑:程序博客网 时间:2024/05/23 10:56
CPU型号:Intel(R) Core(TM) M-5Y71
系统:windows 10
IDE:Microsoft Visual C++ 6.0(下文中简称VC)
void的作用主要有以下三点:
1.作为指针的修饰符,表示无类型指针
2.作为函数的返回类型
3. 作为函数的参数,表示没有形参
1、void是C语言中32个关键字的其中一个,字面意思就是“空,没有”,修饰指针的时候表示“无类型指针”,如void *p,但是却不存在修饰变量,如void i,这是什么原因呢?
在C语言中,一个指针的大小为CPU寻址位数,一般的为32位即4个字节,因此void只是表示该指针类型为无类型(可以指向其他任何类型),因此void *p;是合法的,编译的过。
但是void i;呢?由于这是定义式声明变量的语句,因此编译器要为变量i分配具体的内存空间,而如果用void修饰,编译器就不知道要给i分配多大内存的空间,因此是错误的,过不了编译器!
2、在C语言中,对于类型的检查并没有那么严格,函数可以不写返回类型,编译时也不会警告报错,但是C++环境下,语法就相对比较严格
测试代码1:
main(){}CC++警告无。warning C4508: 'main' : function should return a value; 'void' return type assumed错误无。无。
同样的一段代码,在C语言中完全没有警告和错误,但是C++就有警告,说明C++的语法上更加严格。
测试代码2:
main(){return 0;}CC++警告无无错误无无
这个代码,在C/C++环境都无报错,说明默认函数都是有返回类型的,而且是整型,可在测试3的代码中验证。
测试代码3:
main(){return "hello";}CC++警告warning C4047: 'return' : 'int ' differs in levels of indirection from 'char [6]'无错误无
error C2440: 'return' : cannot convert from 'char [6]' to 'int'
This conversion requires a reinterpret_cast, a C-style cast or function-style cast
error C2617: 'main' : inconsistent return statement
首先可以看到,没有指明返回类型的函数默认返回类型为int。如果返回类型不匹配,C语言是警告,而C++却是错误,更加说明C++的语法更加严格
如果用void修饰返回类型时,函数就可以不用返回类型了。但是如果非要返回一个类型呢?
测试代码4:
void main(){return 0;}CC++警告warning C4098: 'main' : 'void' function returning a value无错误无
error C2562: 'main' : 'void' function returning a value
对于声明为void类型的函数,如果强制返回一个值,在C语言中是一个警告,但是在C++中则上升到错误的高度!
3、void可以修饰函数的形参表,但是在C语言和C++环境下还是有细微的区别
先看下函数形参表中不加void类型,是否就是表示空类型
测试代码5:
void fun(){}void main(){fun(0);}CC++警告无无错误无
error C2660: 'fun' : function does not take 1 parameters
这次的测试代码在C和C++中编译的结果差别很大,在C语言中是一个警告错误都没有,而在C++则是一个错误。
既然在C中函数形参表为空的参数在调用时可以加参数,1个参数可以, 那多个参数呢?
测试代码6:
#include <stdio.h>void fun(){}void main(){fun(0,1,2,3);}
经过编译,发现还是可以通过!
既然可以通过,那也就是说空形参表的函数fun()就等价于一个可变参数的函数,这跟我们设想的结果还是有很大差异的!毕竟我们原意是定义fun()函数是没有形参的!
那如果找到这几个可变参数呢?几乎是找不到的!但是它肯定存在在内存的某个角落,因此定义变量的时候最好要初始化,免得有其他脏数据!
现在在形参表中加入void修饰符
测试代码7:
void fun(void){}void main(){fun(0);}
CC++警告warning C4087: 'fun' : declared with 'void' parameter list无错误无
error C2660: 'fun' : function does not take 1 parameters
结果也跟预想的差不多,C语言中只是温柔的警告,C++中是严重的错误!
- C/C++中void的作用,C/C++的语法对函数的一些影响
- C语言中void的作用
- public void startManagingCursor (Cursor c)的作用
- C语言中一些关键字的作用
- C语言中一些关键字的作用
- C语言中一些关键字的作用
- C语言中一些关键字的作用
- C的void指针
- Ojbective-C的一些语法
- c的一些基本语法
- C语言中一些对文件操作的函数总结
- 关于extern “C” 对函数重载的影响
- 【C/C++】C++虚析构函数的作用
- GNU C中对void指针和函数指针的算术操作支持
- C中函数指针的作用
- C中函数指针的作用
- c语言中strcat函数的作用
- c语言中strcat函数的作用
- 在Javascript中 声明时用\"var\"与不用\"var\"的区别
- Daum Equation Editor(公式编辑器)
- Windows服务器外网无法访问web的解决方法
- idea_文件级别注释&自定义Live Template类似于sout
- 解决IIS7 PHP HTTP 500内部服务器错误问题
- C/C++中void的作用,C/C++的语法对函数的一些影响
- windows PHP写的自动备份网站和MYSQL数据
- 80. Remove Duplicates from Sorted Array II
- CocoaPods管理第三方开源组件,入门介绍
- 实现 win2003 下 mysql 数据库每天自动备份
- php强制文件下载(避免文件或图片直接在浏览器中打开)
- 使用JS实现单击连接保存图片
- SUBLIME基本操作
- 将DedeCMS根目录下的data目录迁移到web以外目录方法