01-C语言概述

0x00 简单的C程序示例

#include 
int main(void)              /*一个简单的c程序*/
{
    int numerb;             /*定义一个名为number的变量*/
    number = 200;           /*为number赋一个值*/
    printf("I am a simple language"); /*使用printf()函数*/
    printf("computer.\n");
    printf("My favorite number is %d because it is web ok.\n", number);
    return 0;
}

0x02 快速概要

#include <stdio.h> //告诉编译器把stdio.h中的内容包含在当前程序中,stdio.h是C编译器软件包的标准部分,它提供键盘输入和屏幕输出的支持

int main(void) //main()函数,int为函数返回值,void表示函数不带任何参数

/*C语言多行注

释写法

*/

//单行注释风格,编译器会忽略注释语句

{ //函数作用域开始

} //函数作用域结束

int number; //声音一个名为number的整数类型

number = 100; //赋值表达式,把值100赋值给名为number的变量

printf(“I am a simple c language.”); //调用标准的C库printf函数在屏幕上打印括号里的语句,光标停在同一行. "\n"告诉计算机另起一行,即把光标移至下一行.“%d”告诉计算机以何种形式输出number的值,打印在何处

return 0; //返回给系统的值

0x03 程序细节

  • #include <stdio.h>相当于把stdio.h文件里面内容拷贝到当前行所在位置,#include这放代码是一条C预处理指令,stdio.h是标准的输入/输出头文件,在C程序顶部的信息集合被称为头文件,头文件帮助编译器把你的程序正确地组合在一起

ANSI/ISO C规定了C编译器必须提供那些头文件,并非所有的C程序都要用到输入输 出,嵌入式编程控制汽车自动燃油系统或蓝光播放机芯片的代码

  • main()函数是C语言一般情况下的开始执行,园括号用于识别函数,int是main()函数的返回类型
  • {}花括号把main()函数括起来,一般的C函数都使用花括号标记函数体的开始和结束
  • int number; 声明了在函数中有一个名为number的变量,其二,int表示number是一个整数.int是一种数据类型,编译器使用这些信息为number的变量在内存中分配存储空间.分号在C语言中是大部很语句和声明的一部分
  • int是C语言的一个关键字,表示一种基本的C语言数据类型.关键字是语言定义的单词,不能做其他用途
  • number是一个标识符,也是一个变量丶函数或其他实体的名称.声明把特地标识符与计算机内存中的特定位置联系起来,同时也确定了存储在某位置的信息类型或数据
  • 在C语言中,所有变量都必须声明才能使用.这意味着必须列出程序中用到的所有变量名及其类型.为了与旧系统更好地兼容,把变量声明都写在块的顶部
  • 数据类型:C语言可以处理多种类型的,如整数丶字符和浮点型.
  • 命名:给变量命名时要使用有意义的变量名或标识符,见名知意
  • C99和C11允许使用更长的标识符名,但是编译器只识别前63个字符.对于外部标识符,只允许使用31个字符.C90只允许6个字符,旧式编译器通常最多只允许使用8个字符.可以用小写字母丶大写字母丶数字和下划线来命名.而且,名称的第一个字符必须是字符或下划线,不能是数字.操作系统和C库经常使用以一个或两个下划线字符开始的标识符,因此最好避免在自己的程序中使用这种名称.C语言的名称区分大小写,即把一个字母的大写和小写视为两个不同的字符.C99和C11根据通用字符名机制添加了扩展字符集.
  1. 三字符序列,C替换了源代码文件中的,即使它们在双引号中也会被替换

选区_011

threeUNCCharset.c

选区_002

  1. 双字符,C替换了源代码文件中的,不会替换双引号中的双字符

选区_012

twoUNCcharset.c

选区_003

  • 赋值:number = 200; //赋值表达式语句,赋值是C语言的基本操作之一.该行代码的意思是”把值1赋给变量number”,在咨询int number;声明时,编译器在计算机内存中为变量number预留了空间,然后在执行这行赋值表达式语句时,把值储存在之前预留的位置.可以给number赋不同的值,这就是number之所以被称为变量的原因
  • printf()函数:圆括号中的内容是从main()函数传递给printf()函数的信息,printf()函数会查看双引号中的内容,并将其打印在屏幕上.当程序执行运行到这一行时,控制权被转给已命名的函数.函数结束后,控制权被返回至主调函数.\n组合代表一个换行符,换行符仅会影响程序输出的显示格式
  • 转移序列使用\开头,%提醒程序要在该处打印一个变量
  • return 0; int声明表明main函数应返回一个整数

0x04 简单程序的结构

C程序的基本结构:程序由一个或多个函数组成,必须有main()函数.函数由函数头和函数体组成.函数头包括函数名丶传入该函数的信息类型和函数的返回类型.通过函数名后的圆括号可识别出函数,圆括号里可能为空,可能有参数.函数体被花括号括起来,由一系列语句丶声明组成.

一个简单的C程序的格式如下:

 
#include <stdio.h>

int main(voud)

{

语句;

return 0;

}

0x05 提高程序可读性的技巧

  • 选择有意义的函数名
  • 写注释
  • 在函数中用空行风格概念上的多个部分
  • 每条语句各占一行

0x06 进一步使用C

 
//fathm_ft.c -- 把2音寻转换成英寸

#include <stdio.h>

int main(void)

{

int feet, fathoms;

fathoms = 2;

feet = 4 * fathoms;

printf(“There are %d feet in %d fathoms!\n”, feet, fathoms);

printf(“Yes, I said %d feet!\n”, 4 * fathoms);

return 0;

}

提供了程序描述,声明了多个变量,进行了乘法运算,并打印了两个变量的值

0x07 多个函数

 
//two_fun.c -- 一个文件中包含两个函数

#include <stdio.h>

void butler(void); /*ANSI/ISO C函数原型*/

int main(void)

{

printf(“I will summon the butler function.\n”);

butler();

printf(“Yes. Bring me some tea and writeable DVDs.\n”);

return 0;

}

void butler(void) /*函数定义开始*/

{

printf(“You rang, sir?\n”);

}

butler()函数在程序中出先了3次.第一次是函数原型(C90增加),告知编译器在程序中要使用该函数.第2次以函数调用的形式出现在main()中.最有一次出现在函数定义中,函数定义即是函数本身的源代码.程序的最后部分是butler()函数的定义,其形式和main()相同,都包含函数头和花括号括起来的函数体.函数头重述了函数原型的信息:bulter()不带任何参数,且没有返回值.何时执行butler()函数取决于它在main()中被调用的位置,而不是butler()的定义在文件中的位置.

0x08 调试程序

  • 语法错误
  • 语义错误
  • 程序状态

0x09 关键字和保留标识符

关键字是C语言的词汇,它们对C而言比较特殊,不能用它们作为标识符.粗体为C90标准新增的关键字,斜体表示的C99标准新增的关键字,粗斜体表示的是C11标准新增的关键字

auto extern short while break float signed _Alignas case for sizeof _Alignof

char goto static _Atomic const if struct _Bool _Complex _Generic _Imaginary _Noreturn _Static_assert _Thread_local enum volatile continue inline switch default int typedef do long union double register unsigned else restrict void return

如果使用关键字不当,编译器会将其视为语法错误.保留标识符包括那些以下划线字符开头的标识符和标准库函数名

0 条评论
发表一条评论