-
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;
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
JavaScript判断两个数组相等的四类方法
js如何操作video标签
React实战--利用甘特图和看板,强化Paas平
【记录】正则替换的偏方
前端下载 Blob 类型整理
抽象语法树AST必知必会
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程