c语言要求经过所有点,C语言一些需要注意的点

前言

重新看了下《C程序设计语言》这本书,有了一些新的收获。

关于变量

程序块(就是两个花括号之间)可以声明和初始化变量,这些变量是只限于花括号内的局部变量,花括号外并不能引用它们。

#include

int main()

{

extern int add(int a, int b);

int a = 1,b = 2;

if(1)

{

int a = 2;

int c = 3;

printf("%d", a);

}

//printf("%d", c);

}

执行程序,输出 a 的结果为 2 ,如果注释掉 printf("%d", c); ,程序会报“未声明标识符‘c’”的错误。

关于extern

extern 是用来声明外部变量的,以下两种写法等效。

#include

//int add(int a,int b);

int main()

{

extern int add(int a, int b);

int a = 1,b = 2;

a = add(a, b);

printf("%d", a);

}

int add(int a, int b)

{

a = a + b;

return a;

}

#include

int add(int a,int b);

int main()

{

int a = 1,b = 2;

a = add(a, b);

printf("%d", a);

}

int add(int a, int b)

{

a = a + b;

return a;

}

关于 include

有两种用法:

#include "文件名"

#include

无论是哪种形式,include 所在的行都会被替换为由文件名指定的文件的内容。如果使用 “”,则在源文件所在的位置查找该文件;如果使用 <>,则根据相应的规则查找文件。

关于命令行参数

最简单的例子是程序 echo 。在 Linux 上执行命令:

echo hello, world

会有如下结果

20210104232858164145.png

这里 hello,world 被当成了参数传递给了 echo 程序。事实上,main 函数是有形式参数的。

void main(int argc,char *argv[])

参数 argc 的值标识运行程序时命令行中参数的数目;参数 argv 是一个指向字符串数组的指针,其中每个字符对应一个参数。按照 C 语言约定,argv[0] 的值时启动该程序的程序名,因此 argc 的值至少为 1。如果 argc 的值为 1,说明程序名后面没有命令行参数。在上面的例子中,argc 的值为 3,argv[0]、argv[1] 和 argv[2] 的值分别为“echo”、“hello,”、“world”。

并要求 argv[argc] 也就是 argv[3] 的值必须为一个空指针。

关于函数指针

函数指针就是指向函数的指针,它可以被当作参数调用,例子如下:

#include

int add(int a, int b);

int sub(int a, int b);

int Operate(int (*operate)(int,int));

int main()

{

printf("%d\n", Operate(add));

printf("%d\n", Operate(sub));

}

int Operate(int (*operate)(int ,int))

{

int a = 1, b = 2;

return operate(a, b);

}

int add(int a, int b)

{

a = a + b;

return a;

}

int sub(int a, int b)

{

a = a - b;

return a;

}

关于 system

命令执行函数 system(char *s) 执行包含在字符串 s 中的命令,然后继续执行当前程序。s 的内容很大程度上于所用的操作系统有关。

在 linux 上编译以下程序并运行

#include

#include

int main()

{

system("date");

return 0;

}

20210104232858431798.png

可以看到结果是一致的。

关于文件描述符

在 UNIX 系统中,所有的外围设备(包括键盘和显示器)都被看作是文件系统中的文件,因此,所有的输入、输出都要通过读文件或者写文件完成。也就是说,通过一个单一的接口就可以处理外围设备和程序之间的所有通信。

通常情况下,在都或者写文件之前,必须先将这个意图通知系统,该过程称为打开文件。如果是写一个文件,则可能需要先创建该文件,也可能需要丢弃该文件中原先已存在的内容。系统检查你的权力(该文件是否存在?是否有访问它的权限?),如果一切正常,操作系统将向程序返回一个小的非负整数,该整数称为文件描述符。任何时候对文件的输入/输出都是通过文件描述符标识文件,而不是通过文件名标识文件。(文件描述符类似于标准库中的文件指针或 MS-DOS 中的文件句柄。)系统负责维护已打开文件的所有信息,用户程序只能通过文件描述符引用文件。

因为大多数的输入/输出是通过键盘和显示器来实现的,为了方便起见,UNIX 对此做了特别的安排。当命令解释程序(即“shell”)运行一个程序的时候,它将打开三个文件,对应的文件描述符分别为 0、1、2 ,依次表示标准输入、标准输出和标准错误。如果程序从文件 0 中毒,对 1 和 2 写,就可以进行输入/输出而不必关心打开文件的问题。

关于流

流(stream)是与磁盘或其他外围设备关联的数据的源或者目的地。尽管在某些系统中(如在著名的 UNIX 系统中),文本流和二进制流是相同的,但标准库仍然提供了这两种类型的流,文本流是由文本行组成的序列,每一行包含 0 个或者多个字符,并以 ‘\n‘ 结尾。在某些环境中。可能需要将文本流转换为其他表示形式(例如把 ‘\n‘ 映射成回车字符和换行符),或者从其他表示形式转换为文本流。二进制流是由未经处理的字节构成的序列,这些字节记录着内部数据,并具有一下性质:如果在同一系统中写入二进制流,然后再读取该二进制流,则读出和写入的内容完全相同。

打开一个流,将把该流与一个文件或设备连接起来,关闭流将断开这种连接。打开一个文件将返回一个指向 FILE 类型对象的指针,该指针记录了控制该流的所有必要信息。

内容来源

《C程序设计语言》

原文:https://www.cnblogs.com/luoleqi/p/14232475.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值