-
c语言教程之变量和函数原型的申明
变量和函数原型的申明
C 语言中函数的原型申明是被建议的,但调用处后面的函数的确可以不申明。 C++中则不论函数定义的先后,必须事先申明。另一方面,局部变量的定义,C 语 言要求必须在函数体的开始部分,某一语句之后再定义变量是错误的,而 C++则没 有这一限制。
//void myFunc(void) //C 语言中这句省略不出错 void myFunc(void) //C++语言中这句不能省略
//|
//|
void
{
myFunc(void)
//|
void
{ //| for (int …… } }
myFunc(void) //| for (int i=0; i<10; i++) i=0; i<10; i++) { …… } }
//出错。 定义要放在 for 前面 //C++中不出错
//| //| //| //|
int
{
main(void)
//| //| {
int
main(void)
myFunc();
//| //|
myFunc();
=
int x = 0; //出错。应放在 myFunc();之前 0; //C++中不出错
//| return x ; //| //| }
//|
int x
return x ;
}
三、其它不同点
C++语言是 C 语言扩展而来,C 程序自然可以直接使用,但的确仍有一些不同 之处。 1. C 语言中,字符常量被当作整数,而 C++语言中不是,字符常量就当作 字符。这虽然很小,但却是重要的一点。 2. C 语言中全局变量多次定义虽不好,却不出错。C++语言中则出错。
3. C 语言命名限制在 31 个有效字符,C++语言中没有 限制,但太长了使用不方便。 4. C 语言中 main()函数也能被调用,当然这不是好方 法。C++语言中 main()被禁止调用。 5. C 语言中不能取寄存器变量的地址,C++语言中可以。 6. C 语言中没有 bool 类型,wchar_t 是宏定义,C++语言中,增加了 bool 基本类型和 wchar_t 扩展类型。 7. C 语言中用结构体定义变量时,“struct 结构体名 变量名”,在 C++中 “struct”可以省略。
四、C++语言的新旧版本 语言的新旧版本
C++语言自身也在发展,新旧版本的写法上也有所不同。小雅的教程并不讨论 语言的发展过程,所以只讲新内容。这也是与时俱进吧。 名字空间是防止名称冲突而申明的“领域”,打个比方,C 盘中文件增多就有可 能有相同的文件名,这样我们就必须用目录来管理,将相同文件名放在不同的目录 里就可以了。当目录名逐渐增加,也有重复名称时,一是再增加父目录,另一办法 就是将相同目录名放在不同的盘符下。有关名字空间后面有专门章节讲解。
//旧版本的写法 #include //“.h”不能少 //名字空间是必须的 int
{ …… } main(void)
//| //|
//| //新版本的写法 #include using namespace std;
//| //| //| //| //| } { ……
int
main()
五、控制台的输入出
C 语言的控制台输入出是用函数来实现的,最常用的是 printf()和 scanf()函数。 C++语言中一般使用运算符“<<”和“>>”,这比 C 语言中的函数的功能更强大、更方 面,下面只介绍基本使用,更强大的功能要等学完了“类”之后才讲解,这样更容易 理解。 C 语言中运算符“<<”和“>>”是位操作运算符,C++中仍然有效,而用作输入出 时,最前面必须是 cin 或 cout,表示从控制台输入或输出,cin 和 cout 是 C++定义好 的输入出流。输出时当需要回车时,可以用“\n”,也可以用“endl”。
#include
#include using namespace int
{ main ( )
std;
int i, j; double d;
string s;
i = 10; d = 123.45; s = "quanxue.cn";
cout << "请输入一个整数:"; cin >> j; cout << "i=" << i << "\n"; cout << "j="; cout << j; cout << endl; cout << "d=" << d << endl; cout << s << endl;
return
}
0;
一、名字空间的定义
名字空间除了系统定义的名字空间之外,还可以自己定义,定义名字空间用关 键字“namespace”,使用名字空间时用符号“::”指定。 1. 不指定名字空间的变量或函数都是当前名字空间下的变量或函数。 2. 不定义名字空间的情况下,都属于全局名字空间。 3. 同一个名字空间可以定义多次。
#include using namespace std; namespace
{ na
void
print(int n) {
//与名字空间 nb 的函数名相同
cout << "na::print: " << n << endl; } }
namespace
{
nb
void
} }
print(int n) {
//与名字空间 na 的函数名相同
cout << "nb::print: " << n << endl;
namespace
{
na
//同一个名字空间可以定义多次 int
b) {
void
print2(int a,
print(a); print(b); } }
int
{
main ( )
na::print(3); nb::print(4); na::print2(5, 6);
指定 na 下的 print 函数 指定 na 下的 print 函数 指定 na 下的 print2 函数
return
}
0;
二、using 的使用
使用“using namespace”可以使得后面不需要每次指定名字空间,相当于 java 中 的 import 功能。不过,多次使用“using namespace”时,被指定的名字空间同时有效, 很容易冲突。
#include using namespace std; namespace
{ na
void
} }
print(int a) {
cout << "na::print: " << a << endl;
namespace
{
nb
using namespace na; void print2(int a, int b) { print(a); //na 的函数 print(b); //na 的函数
}
//这是 nb 自身的函数
void
} }
print(int n) {
//这也是 nb 自身的函数
cout << "nb::print: " << n << endl;
namespace
{
nc
using nb::print2; //指定只使用 nb 的 print2()函数 void print(int a, int b, int c) { print2(a, b); //这是 nb 的函数 nb::print(c); //using 中没有指定,所以这儿必须用 nb::来指 定
} }
int
{
main ( )
using namespace na; print(2); //na 的 print()函数 //using namespace nb; //这样使用时,na 和 nb 同时有效 //print(3); //编译系统不清楚究竟调用 na 和 nb 中的哪一个,因为函数名和参数相同 using namespace
print(4, 5, 6); nc;
//这样使用时,na 和 nc 同时有效 //nc 的 print()函数的参数与 na 中的参数不同,
所以这儿不出错。
using
nb::print;
//指定下面用的 print()函数是 nb 的函数
print(7);
return
}
0;
栏目列表
最新更新
C#基于接口设计三层架构Unity篇
C#线程 入门
C#读取静态类常量属性和值
C# 插件式编程
C# 委托与事件有啥区别?
C#队列学习笔记:队列(Queue)和堆栈(Stack
linq 多表分组左连接查询查询统计
C#队列学习笔记:MSMQ入门一
C# 基础知识系列- 1 数据类型
二、C#入门—基础语法
C# 在Word中添加Latex 数学公式和符号
inncheck命令 – 检查语法
基于UDP的服务器端和客户端
再谈UDP和TCP
在socket编程中使用域名
网络数据传输时的大小端问题
socket编程实现文件传输功能
如何优雅地断开TCP连接?
图解TCP四次握手断开连接
详细分析TCP数据的传输过程
SqlServer 利用游标批量更新数据
BOS只读状态修改
SQL Server等待事件—PAGEIOLATCH_EX
数据库多行转换为单一列
获取数据表最后最后访问,修改,更新,
计算经历的时间
SQL查询结果自定义排序
修改数据库默认位置
日期简单加或减
从日期获取年,月或日