【C语言入门必备】--内含编译器的对比,手把手教您写代码


前言

您好!本篇将为您简单的介绍C语言的常见概念(入门必备),以及新手该如何选择编译器方面的相关知识,并手把手带您创建项目、写代码,希望您会喜欢。


1.C语言简介

1.1什么是C语言?

人和人交流使用的是自然语言,如:汉语、英语。那人和计算机是怎么交流的呢?使用的是计算机语言。目前已知有上千种计算机语言,人们是通过计算机语言写的程序,从而给计算机下达指令,让计算机进行工作。

C语言就是众多计算机语言中的一种,当然C++、Python、Java等都是计算机语言。

C语言是一门编译型计算机语言, C语言源代码都是文本文件,文本文件本身无法执行,必须通过编译器的翻译和链接器的链接,生成二进制的可执行文件,可执行文件才能执行。

C语言的代码是放在.c为后缀的文件中的,要得到最终运行的可执行程序,中间要经过编译和链接2个过程。
在这里插入图片描述

注:

  1. 每个源文件(.c为后缀的文件)单独经过编译器处理生成对应的目标文件(.obj为后缀的文件)。
  2. 多个目标文件和库文件经过链接器处理生成对应的可执行程序(.exe为后缀的文件)。

1.2C语言的历史和辉煌

C语言最初是作为Unix系统的开发工具而发明的。下图是C语言的创造者——丹尼斯·里奇。
在这里插入图片描述
下图为C语言的发展史:
在这里插入图片描述
计算机语言排行榜,从中可以看出C语言一直位居前三。

2.选择编译器

2.1编译器的对比

C语言是一门编译型的计算机语言,需要依赖编译器将计算机语言转换成机器能够执行的机器指令。
那我们常见的C语言编译器都有哪些呢?比如:msvc、clang、gcc就是一些常见的编译器,还有一些集成开发环境如:VS2022、XCode、CodeBlocks、DevC++、Clion等。

集成开发环境(IDE)用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面等工具。集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套。

  • VS2022:集成了MSVC(安装包较大一些,安装简单,无需多余配置,使用起来非常方便)
  • Xcode:集成了clang(苹果电脑上的开发工具)
  • CodeBlocks:集成了gcc(工具比较小众,需要配置环境)
  • Devc++:集成了gcc(小巧,但是工具过于简单,不利于代码风格的养成)
  • Clion:默认使用CMake,编译器可以配置(工具是收费的)

2.2VS2022的优缺点

优点:

  1. VS2022是一个主流的集成开发环境,企业中使用较为普遍
  2. VS2022包含了编辑器+编译器+调试器,功能强大
  3. 直接安装即可使用,基本不用额外配置环境,上手容易
  4. 默认界面是中文的,对初学者相当友好

缺点:

  • 功能丰富、安装包大、占用空间多

3.源文件、头文件

在项目中就可以添加源文件和头文件。
C语言把.c为后缀的文件称为源文件,把.h文件称为头文件。
在这里插入图片描述
在VS上写代码,我们是需要创建项目的,直接创建项目就可以了。
具体步骤请看下一个板块。

4.第一个C语言程序

现在将带您开始写代码,您可以按照图片顺序进行操作:

  1. 打开VS2022后,会出现如图界面,点击【创建新项目】;

  1. 点击【空项目】,再点击右下角【下一步】;

在这里插入图片描述

  1. 填写【项目名称】,填写好点击右下角【创建】;

提醒:
项目名称要起得有意义;名称里不要用特殊字符,可以使用下划线;名称里不要用中文。

在这里插入图片描述

  1. 点击【源文件】,【添加】,再点击【新建项】;

如果进入后左侧或右侧没有【解决方案资源管理器】,点击上方【视图】,在里面就可以找到啦!

在这里插入图片描述

  1. 这时会出现两种情况,您可以根据自己的情况进行下一步;
    ①出现下图界面,点击左下角【显示所有模板】,就会出现第二种情况的界面,后续操作一致。(这里不建议使用紧凑视图是因为紧凑视图可能会导致一些问题,所以保险起见,建议您使用全视图。)
    在这里插入图片描述

②出现下图界面,先选择【C++文件(.cpp)】,再将名称进行更改 (这里切记:一定要将名称筐里的内容全部删除,包括后缀,然后起类似于xxx.c这样的名称,因为我们写的是C语言的代码,而C语言程序的后缀为.c),更改好后,点击右下角【添加】即可。

在这里插入图片描述

  1. 接下来,我们便可以开始写代码了。
#include <stdio.h>

int main()
{
	printf("hello word\n");

	return 0;
}

在这里插入图片描述

5.主函数:main函数

每个C语言程序不管有多少行代码,都是从main函数第一行开始执行的,main函数是程序的入口,main函数也被叫做:主函数。main函数前面的int表示main函数执行结束的时候返回一个整型类型的值,所以在main函数的最后写return 0,正好前后呼应。

  • main函数是程序的入口。
  • main函数有且仅有一个。
  • 即使一个项目中有多个.c文件,但是只能有一个main函数。

提醒:代码中任何一点错误都会导致代码运行错误,比如字母打错,少标点符号,用成中文标点符号等错误,所以打代码时一定要谨慎!

6.库函数

为了不再重复实现常见的代码,让程序员提升开发效率,C语言标准规定了一组函数,这些函数再由不同的编译器厂商根据标准进行实现,提供给程序员使用。这些函数组成了一个函数库,被称为标准库,这些函数也被称为库函数。在这个基础上一些编译器厂商可能会额外扩展提供部分函数(这些函数其他编译器不一定支持)。
一个系列的库函数一般会声明在同一个头文件中,所以库函数的使用,要包含对应的头文件。举例:前面我写的代码中printf就属于库函数,所以我在代码最前面包含了相对应的头文件<stdio.h>。
库函数比较多,后续会慢慢介绍。了解库函数

7.关键字

C语言中有一批保留了名字的符号,比如:int、if、return,这些符号被称为保留字或关键字。

C语言的32个关键词如下:

       auto  break  case  char  const  continue  default   do   double   else   enum 
       ex   float   for   goto   if   int    long   register    return   short   signed   
       sizeof    struct   switch   typedef   union   unsigned   void   volatile   while 

注:在C99标准中加入了inline、restrict、_Bool、_Complex、_Imaginary等关键字。

还有许多关键字您也可以了解一下,不过使用最频繁的还是上面32个。C语言的所有关键字

提醒:

  • 关键字都有特殊的意义,是保留给C语言使用的(别人不能用)。
  • 程序员自己在创建标识符的时候是不能和关键字重复的。
  • 关键字自己也不能先创建。

8.字符、ASCII编码

在键盘上可以敲出各种字符,如:a、q、@、#等,这些符号都被称为字符,C语言中字符是用单引号括起来的,如:‘a’、‘q‘、‘@’。
我们知道在计算机中所有的数据都是以二进制的形式存储的,那这些字符在内存中分别以什么样的二进制存储的呢?如果我们每个人自己给这些字符中的每个字符编一个二进制序列,这个叫做编码。为了方便大家互相通信,不造成混乱,后来美国国家标准学会(ANSI)出台了一个标准ASCII编码,C语言中的字符就遵循了ASCII编码的形式。
ASCII码表

您不需要记住所有ASCII码表中的数字,使用时查看就行,不过最好能掌握几组特殊数据:

  • 字符A~Z的ASCII码值从65~90。
  • 字符a~z的ASCII码值从97~122。
  • 小写字母的ASCII码值-32就能得到对应大写字母的ASCII码值。
  • 数字字符0~9的ASCII码值从48~57。
  • 换行符\n的ASCII码值是10。
  • 在这些字符中,ASCII码值从0~31这32个字符是不可打印字符,无法打印在屏幕上观察。
  • 最初ASCII编码中只有128个字符的编码。

单个字符的打印可以使用%c来指定格式,ASCII码表可打印字符展示:

#include<stdio.h>

int main()
{
	int i = 0;
	for (i = 32; i <= 127; i++)
	{
		printf("%c ", i);
		if (i % 16 == 15)
			printf("\n");
	}
	
	return 0;
}

在这里插入图片描述

9.转义字符

也许在前面代码中您看到\n很疑惑是什么,其实在字符中有一组特殊的字符是转义字符,转义字符顾名思义:转变原来意思的字符。
比如:我们有字符n,在字符串中打印的时候自然能打印出这个字符,如下:

#include<stdio.h>

int main()
{
	printf("adcndef");
	return 0;
}

在这里插入图片描述

如果我们修改一下代码,在n的前面加上\,代码会变成如下:

#include<stdio.h>

int main()
{
	printf("adc\ndef");
	return 0;
}

在这里插入图片描述

我们可以看到修改前后代码的输出结果是不同的,那这是什么原因导致的呢?
这就是转义字符的问题,\n是一个转义字符表示换行的意思,我们可以简单的理解为\让n的意思发生了转变,n本来是一个普通的字符,被\转义为换行的意思。

C语言中的转义字符还有许多,如下:

  • \':用于表示字符常量‘。
  • \":用于表示一个字符串内部的双引号。
  • \:用于表示一个反斜杠,防止它被解释为一个转义序列符。
  • \a:警报,这会使得终端发出警报声或出现闪烁,或者两者同时出现。
  • \b:退格符,光标回退一个字符,但不删除字符。
  • \f:换页符,光标换到下一页。在现代系统上,这已经反映不出来了,行为改成类似于\v。
  • \n:换行符。
  • \r:回车符,光标移到同一行的开头。
  • \t:制表符,光标移到下一个水平制表位,通常是下一个4或8的倍数。
  • \v:垂直分隔符,光标移动到下一个垂直制表位,通常是下一行的同一列。

下面两种字符可以理解为:字符的八进制或十六进制表示形式。

  • \ddd:ddd表示1~3个八进制的数字。 如:\130表示字符X
  • \xdd:dd表示两个十六进制的数字。 如:\x30表示字符0
  • \0:null内容,代表没有内容,\0就是\ddd这种类型的一种,用于字符串的结束标志,其ASCII码值是0。

这些字符是可以写代码验证的,如下图,您也可以自己验证一下。

//演示转义字符
#include<stdio.h>

int main()
{
	printf("%c\n", '\'');
	printf("%s\n", "\"");
	printf("\a");
	printf("%c\n", '\130');
	printf("%c\n", '\x30');

	return 0;
}

关于转义字符,我们首先要了解,然后要能在字符串中辨认出来。
转义字符列表

10.字符串

C语言中如何表示字符串呢?用双引号括起来的一串字符就被叫做字符串,如“abcd”就是一个字符串。
字符串的打印格式可以使用%s来指定,也可以直接打印,如下:

//打印字符串
#include <stdio.h>

int main()
{
	printf("%s\n", "hello C");
	printf("hello C\n");

	return 0;
}

C语言字符串中一个特殊的知识,就是在字符串的末尾隐藏放着一个\0字符,这个\0字符是字符串的结束标志。
对于字符“abcd”,我们看到了4个字符a、b、c、d,但是实际上末尾还隐藏了一个\0的转义字符,\0是字符串的结束标志。所以我们在计算字符串长度时,遇到\0就自动停止了。
C语言中也可以吧一个字符串放在一个字符数组中,我们这里利用下面的代码来演示\0的功能,如下:

#include <stdio.h>

int main()
{
	char arr1[] = { 'a','b','c' };//arr1数组中存放三个字符
	char arr2[] = "abc";//arr2数组中存放字符串
	printf("%s\n", arr1);
	printf("%s\n", arr2);

	return 0;
}

在这里插入图片描述
我们可以看到,arr1字符数组在打印的时候,打印了a,b,c后还打印了一些随机值,这就是因为arr1在末尾的地方没有\0字符作为结束标志,在打印的时候没有停止。
但是arr2的打印就是完全正确的,就是因为arr2数组是使用字符串常量初始化的,数组中有\0作为技术标志,打印可以正常停止。
如果在arr1数组中单独放一个\0,会发生什么变化呢?

#include <stdio.h>

int main()
{
	char arr1[] = { 'a','b','c','\0'};
	char arr2[] = "abc";
	printf("%s\n", arr1);
	printf("%s\n", arr2);
	printf("%s\n", "abc\0def");

	return 0;
}

在这里插入图片描述
看到三次打印的结果是一样的,都是打印到\0的时候就停止了,那从上面的例子确实观察到了\0的作用和重要性。

11.语句

C语言的代码是由一条条语句构成的,C语言中的语句分为以下五类:

  • 空语句
  • 表达式语句
  • 函数调用语句
  • 复合语句
  • 控制语句

11.1空语句

空语句是最简单的,一个分号就是一条语句,是空语句。

//空语句演示
#include<stdio.h>

int main()
{
	;//这就是一条空语句
	return 0;
}

空语句一般出现的地方是:这里需要一条语句,但是这个语句不需要做任何事,就可以写一个空语句。

11.2表达式语句

表达式语句就是在表达式后面加上分号。如下所示:

#include<stdio.h>

int main()
{
	int a = 20;
	int b = 0;
	b = a + 5;//表达式语句
	return 0;
}

11.3函数调用语句

函数调用的时候,也会加上分号,就是函数调用语句。

//函数调用语句演示
#include<stdio.h>

int Add(int x, int y)
{
	return x + y;
}

int main()
{
	printf("hello c\n");//函数调用语句,调用了printf函数
	int ret = Add(2, 3);//函数调用语句
	return 0;
}

11.4复合语句

复合语句其实就是代码块,成对括号中的代码就构成一个代码块,也被称为复合语句。

//复合语句代码演示
#include <stdio.h>

void print(int arr[], int sz)//函数的大括号中的代码也构成复合语句
{
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
}
int main()
{
	int i = 0;
	int arr[10] = { 0 };
	for (i = 0; i < 10; i++)//for循环的循环体的大括号中的就是复合语句 
	{
		arr[i] = 10 - i;
		printf("%d\n", arr[i]);
	}
	return 0;
}

11.5控制语句

控制语句用于控制程序的执行流程,以实现程序的各种结构方式(C语言支持三种结构:顺序结构、选择结构、循环结构),它们由特定的语句定义符组成,C语言有九种控制语句。
可分为以下三类:

  1. 条件判断语句,也叫分支语句:if语句、switch语句;
  2. 循环执行语句:do while语句、while语句、for语句;
  3. 转向语句:break语句、goto语句、continue语句、return语句;

后期会给您详细介绍,请您持续关注哦!

12.注释介绍

注释是对代码的说明,编译器会忽略注释,也就是说,注释对实际代码没有影响。
注释是给程序员自己或者其他程序员看的。
好的注释可以帮您更好的理解代码,但是也不要过度注释,不要写没用的注释。
不写注释也可能会让后期阅读代码的程序员抓狂。
写注释在一定程度上反映了程序作者的素质,建议您写必要的注释

12.1注释的两种形式

C语言的注释有两种表示方法。

12.1.1 /**/的形式

第一种方法是将注释放在/* … */之间,内部可以分行。

/*这是注释*/

/*
这是注释
*/

这种注释可以插在行内。

int fopen(char* s/* file name */, int mode);

上面示例中,/* file name */用来对函数参数进行说明,跟在它后面的代码依然会有效执行。这种注释一定不能忘记写结束符号 */,否则很容易出现错误。

#include<stdio.h>
int main()
{
	int a = 20;/*注释一
	int b = 0;
	b = a + 5;/*注释二*/
	return 0;
}

上面示例中,本来想在第四行和第六行的后面分别加上一个注释。但是,第四行的注释忘记写结束符号,导致注释一延续到第六行才结束。
/* */ 的这个注释不支持嵌套注释,/* 开始注释后,遇到第一个 */就认为注释结束了。

12.1.2 //的形式

第二种写法是将注释放在双斜杠//后面,从双斜杠到行尾都属于注释。这种注释只能是单行,可以放在行首,也可以放在一行语句的结尾,这是C99标准新增的语法。

//这是注释

int x = 1;//这也是注释

不管是哪一种注释都不能放在双引号里面。
双引号里面的注释符号,会成为字符中的一部分,解读为普通符号,失去注释作用。

printf("//hello /* word */");

上面代码中,双引号里面的注释符号,都会被视为普通符号,没有注释作用。
编译时,注释会被替换为一个空格,所以min/*这里是注释*/Value会变成min Value,而不是minValue。

注释快捷键:Ctrl+K+C;
取消注释快捷键:Ctrl+K+U;


总结

本次为您讲述了C语言中一些常见的概念,有些知识介绍得比较浅,只是让您了解一下,后续我会给出详细的讲解,希望您持续关注哦!

                好啦,快乐的时光总是非常的短暂,本次我的分享就到这里啦。
    
                     感谢您的阅读,希望对您有所帮助,咱们下篇见!
                     
                           友友们别忘了点赞、关注哦!
  • 49
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值