【c-primer-plus】第2章-C语言概述



一、C程序结构

//一个简单的例子
#include<stdio.h>

//函数原型
void butler(void);

int main(void){
    int num;
    num = 1;

    printf("I am a simple ");
    printf("computer.\n");
    printf("My favourite number is %d because it is first.\n", num);
	butler();
	
    return 0;
}

void butler(void){
	printf("This is a function.")
}

以上为一个简单的C程序,包含了一个一般C程序具备的结构,下文将从这些结构展开

1. #include指令和头文件

  • 程序第一行,#include<stdio.h>相当于把stdio.h文件中的所有内容都输入该行所在的位置
  • #include这条代码为一条预处理机指令,其中的符号#表明C预处理机在编译器接手之前处理这条指令,常见的还有#define

2. 函数原型

函数名的出现有三种含义,即函数原型、函数调用、函数定义。
C90标准新增了函数原型,函数原型是一种声明形式,告知编译器正在使用某函数,因此函数原型也被称为函数声明

  • C的惯例是把main()函数放在开头,后面再写各函数的定义,因为它提供了程序的基本框架
  • C标准建议,要为程序中使用到的所有函数提供函数原型
  • 标准include文件为标准库函数提供了函数原型,例如在C标准中,stdio.h文件包含了printf()的函数原型

3. main()函数

  • int是main()函数的返回类型,这表明main()函数的返回的值是整数,返回给操作系统
  • 上述代码中main()方法写为int main(void),常见的其他写法如下
//写法1
//C90标准勉强接受这种写法,但是C99和C11标准不允许这样写,不建议
main()

//写法2
//一些编译器允许这样写,但是所有的标准都未认可这种写法,而且许多编译器都不能这样写,不建议
void main()

4. 花括号、函数体和块

  • 花括号可用于把函数中的多条语句合并为一个块或一个单元
  • 花括号在C语言中的作用类似于某些语言中的begin和end

5. 声明和标识符

  • 声明把特定标识符与计算机内存中的特定位置联系起来,同时也确定了存储在某位置的信息类型和数据类型
  • 把声明都置于块的顶部,好处是把声明都放在一起更容易理解程序的用途
  • 对标识符名,编译器只识别前63个字符;对于外部标识符,只允许使用31个字符。编译器会忽略超出的字符
  • 操作系统和C库经常使用以一个或两个下划线字符开头的标识符

6. printf()函数

  • printf()函数名中的f提醒用户,这是一种格式化的打印函数
  • 换行符是一种转义序列,转义序列用来代表难以表示或者无法输入的字符,例如\t代表Tab键、\b代表Backspace

7. return语句

  • 有返回值的C函数要有return语句
  • 如果遗漏main()函数中的return语句,程序在运行至最外面的右花括号 } 时会返回0

二、调试(debug)程序

运行程序,编译器报错时注意:

  1. 实际上,有时不用把编译器报告的所有错误逐一修正,仅修正第1条或前几条报错,错误信息就会少很多
  2. 报错的位置比真实的错误位置滞后一行

章节练习

//练习4
#include<stdio.h>

void jolly(void);
void deny(void);

int main(void){
    jolly();
    jolly();
    jolly();
    deny();
}

void jolly(void){
    printf("For he's a jolly good fellow!\n");
}
void deny(void){
    printf("Which nobody can deny!\n");
}

//练习5
#include<stdio.h>

void br(void);
void ic(void);

int main(void){
    br();
    printf(", ");
    ic();
    printf("\n");
    ic();
    printf("\n");
    br();
}

void br(void){
    printf("Brazil, Russia");
}
void ic(void){
    printf("India, China");
}

//练习8
#include<stdio.h>

void one_three(void);
void two(void);

int main(void){
    printf("starting now:\n");
    one_three();
    printf("done!\n");
}

void one_three(void){
    printf("one\n");
    two();
    printf("three\n");
}

void two(void){
    printf("two\n");
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值