-
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 语言中函数的原型申明是被建议的,但调用处后面的函数的确可以不申明。 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;
最新更新
Objective-C语法之代码块(block)的使用
VB.NET eBook
Add-in and Automation Development In VB.NET 2003 (F
Add-in and Automation Development In VB.NET 2003 (8
Add-in and Automation Development in VB.NET 2003 (6
Add-in and Automation Development In VB.NET 2003 (5
AddIn Automation Development In VB.NET 2003 (4)
AddIn And Automation Development In VB.NET 2003 (2)
Addin and Automation Development In VB.NET 2003 (3)
AddIn And Automation Development In VB.NET 2003 (1)
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
武装你的WEBAPI-OData入门
武装你的WEBAPI-OData便捷查询
武装你的WEBAPI-OData分页查询
武装你的WEBAPI-OData资源更新Delta
5. 武装你的WEBAPI-OData使用Endpoint 05-09
武装你的WEBAPI-OData之API版本管理
武装你的WEBAPI-OData常见问题
武装你的WEBAPI-OData聚合查询
OData WebAPI实践-OData与EDM
OData WebAPI实践-Non-EDM模式