目录
C语言之C生万物
C语言作为一门底层开发语言,从十九世纪七十年代诞生至今近50年间,在TIOBE 排行榜中,C/C++位置长期霸占前三名,没有丝毫撼动,可谓经典永不过时!
而C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的
C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超
级电脑等作业平台。
二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制
定了一套完整的美国国家标准语法,称为ANSI C,作为C语言最初的标准。 [1] 目前2011年12月8
日,国际标准化组织(ISO)和国际电工委员会(IEC)发布的C11标准是C语言的第三个官方标
准,也是C语言的最新标准,该标准更好的支持了汉字函数名和汉字标识符,一定程度上实现了汉
字编程。
C语言是一门面向过程的计算机编程语言,与C++,Java等面向对象的编程语言有所不同。
其编译器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等。
Clang是一个C语言、C++、Objective-C语言的轻量级编译器。源代码发布于BSD协议下。Clang是一个由Apple主导编写,基于LLVM的C/C++/Objective-C编译器,2013年4月,Clang已经全面支持C++11标准,并开始实现C++1y特性(也就是C++14,这是C++的下一个小更新版本)。Clang将支持其普通lambda表达式、返回类型的简化处理以及更好的处理constexpr关键字。
终端用户特色:
快速编译和较少内存占用;有诊断功能;兼容GCC。
GCC原名为GNU C语言编译器(GNU C Compiler),只能处理C语言。但其很快扩展,变得可处理C++,后来又扩展为能够支持更多编程语言。GCC(GNU Compiler Collection,GNU编译器套件)是由GNU开发的编程语言编译器,GCC的初衷是为GNU操作系统专门编写一款编译器,现已被大多数类Unix操作系统(如Linux、BSD、MacOS X等)采纳为标准的编译器,甚至在微软的Windows上也可以使用GCC。
MSVC,就是微软(MS)的VC运行库,即Visual C++的运行库。使用微软的运行库可以在编程的时候大大减少编码量,同时也能提高代码的兼容性,在运行的时候,就需要事先安装好运行库。而所有的运行库统称为MSVC。属于集成开发环境。而在C语言学习阶段,将会使用到VS2019(Visual Stdio 2019)。
VS2019的使用方法(如下图)
其中包括编辑器,编译器,调试器,链接器。
最后,便能开始C语言的编程啦!
C语言的构成:
主函数
int main()
{
return 0;//要缩进,返回值0
}//一个C程序有多个函数,但只有一个主函数,执行代码是先从主函数开始执行
//书写代码要规范
//每个一句以分号形式结束,但函数的头文件处的预处理命令不能加分号
//函数体内,在函数后要加{}
#define _CRT_SECURE_NO_WARNINGS 1//此处定义一个安全函数,解决VS环境下scanf无法安全使用的情况
#include<stdio.h>//#定义的预处理命令,头文件
int main()
{
int a = 0;//定义一个整型变量
scanf("%d",&a);//输入函数,%d是从键盘接收一个整型变量,用“,”隔开,&a中&是寻址操作符
printf("Hello World!\n");//'\n'是换行命令符,“”内输入要输出的内容
printf("%d",a);//输出函数
return 0;
}
//&a表示对象a在内存中的地址,是一个右值
//在C语言中表示位于赋值运算符两侧的两个值,左边叫左值(内存空间),右边叫右值(内存地址里的数据)
左值
指的是如果一个表达式可以引用到某一个对象,并且这个对象是一块内存空间且可以被检查和存储,那么这个表达式就可以作为一个左值。
右值
指的是引用了一个存储在某个内存地址里的“数据”。
从上面的两个定义可以看出,左值其实要引用一个对象,而一个对象在我们的程序中又肯定有一个名字或者可以通过一个名字访问到,所以左值又可以归纳为:左值表示程序中必须有一个特定的名字引用到这个值。而右值引用的是地址里的内容,所以相反右值又可以归纳为:右值表示程序中没有一个特定的名字引用到这个值除了用地址。
#include<stdio.h>
此段代码是文件包含命令,主要是将<>或""中的文件命令包含到本程序中,使其成为代码的一部分,包含的文件一般由系统提供。这里的stdio是standard input output的缩写,是标准输入输出的意思。有了这个头文件就可以使用scanf函数和printf函数。
scanf()函数
输入函数,格式 scanf(格式控制字符串,参数地址表);
其中,格式控制字符串是用双引号括起来的字符串,它包括格式转换说明符和分隔符两个部分。函数 scanf ()的格式转换说明符通常由%开始,并以一个格式字符结束,用于指定各参数的输入格式。
格式转换说明符 | 用法 |
%d | 输入十进制整数 |
%o | 输入八进制整数 |
%x | 输入十六进制整数 |
%c | 输入一个字符,空白字符(包括空格,回车,制表符)也作为有效字符输入 |
%s | 输入字符串,遇到空白字符(包括空格、回车、制表符)时,系统认为读入结束(但在开始读之前遇到的空白字符会被系统跳过) |
%f或%e | 输入实数,以小数或指数形式输入均可 |
%% | 输入一个百分号 |
printf()函数
输入函数,格式 printf(格式控制字符串);
printf(格式控制字符串,输出值参数表);
其中,格式控制字符串( Format String )是用双引号括起来的字符串,也称转换控制字符串,输出值参数表中可有多个输出值,也可没有(只输出一个字符串时)。一般情况下,格式控制字符串包括两部分:格式转换说明( Format Specifier )和需原样输出的普通字符,格式转换说明由%开始,并以转换字符( Conversion Character )结束,用于指定各输出值参数的输出格式。
格式转换说明 | 用法 |
%d | 输出带符号的十进制整数,正数的符号省略 |
%u | 以无符号的十进制整数形式输出 |
%o | 以无符号的八进制整数形式输出,不输出前导符0 |
%x | 以无符号十六进制整数形式(小写)输出,不输出前导符0x |
%X | 以无符号十六进制整数形式(大写)输出,不输出前导符0x |
%c | 输出一个字符 |
%s | 输出字符串 |
%f | 以十进制小数形式输出实数(包括单、双精度),整数部分全部输出,隐含输出6位小数,输出的数字并非全部是有效数字,单精度实数的有效位数一股为7位,双精度实数的有效位数一般为16位。 % f 适合于输出像3.14这样的小数位较少的实数,可以使实数输出的宽度较小 |
%e | 以指数形式(小写 e 表示指数部分)输出实数,要求小数点之前必须有且仅有一位非零数字。 |
%E | 以指数形式(大写E表示指数部分)输出实数 |
%g | 自动选取f或 e 格式中输出宽度较小的一种使用, 且不输出无意义的0 |
%% | 输出百分号% |
Continue......