zoukankan      html  css  js  c++  java
  • C语言学习笔记-C语言概述与开发环境搭建

    C语言学习笔记-C语言概述与开发环境搭建

    C语言概述

    什么是语言

    人和人之间实现信息交流的工具,例如中国人和中国人使用中文进行交流。

    什么是C语言

    人和计算机交流也要使用语言,这种语言被称为计算机编程语言。
    人和人之间交流与人和计算机交流的区别就是计算机只要在编程语言的语法不出错,逻辑不出错的前提条件下会无条件服从人下达的指令
    C语言是起源于贝尔实验室,由丹尼斯·里奇和肯·汤普逊在开发Unix系统时被开发出来的一种计算机编程语言。

    主流编程语言语言进化史

    • 机器语言
    • 汇编语言
    • 高级语言
      • 面向过程 C
      • 面向对象 C++/Java/Python/Go

    C语言的特点

    • 优点
      • 运行效率高:执行速度快,仅次于汇编
      • 功能强大 (操作系统、驱动程序、中间件、数据库 )
      • 编程自由 (语法检查不严格)
      • 可移植性好:标准库是可移植的(Windows,Linux,macOS)
    • 缺点
      • 开发效率低:实现功能的周期长
      • 严重依赖平台库
      • 编程自由导致经验不足时容易出错
      • 不同的环境(Windows,Linux,macOS)编译的结果(极少数)可能不同

    学习C语言的理由

    • 大学理工科必修的编程语言
    • 学习数据结构、C++的基石
    • 高薪程序员面试、考试必备
    • 写外挂、做黑客必须掌握的语言
    • 重要的基石语言:Unix,Linux,Windows,Java,C++,C#底层实现都是C语言实现的
    • 能快速学习其他编程语言

    C语言的应用领域

    • 网站后台
    • 操作系统(Windows,Linux,macOS)
    • 多媒体应用
    • 驱动程序
    • 专门针对某个主题编写强大的程序库
    • 大型网络游戏
    • 大型游戏引擎
    • C语言可以开发另外一个语言出来,例如 Python Object-C,Swift,PHP
    • 数据库系统
    • 中间件(Redis,Nginx,Git)

    主流语言的应用场景

    • 嵌入式:C包打天下,极其少量的汇编
    • Web开发:前台 HTML5,CSS3,JavaScript,后台主要是Java,Python,Go,PHP相关技术栈
    • 高性能服务器: Apache,Nginx,Memcached,Redis等等高性能服务器和数据库都是纯C开发
    • 分布式应用:Java,Go,Python
    • 游戏服务器:C/C++和Lua脚本
    • 并行计算:Java,Go,Erlang
    • 游戏引擎:C++和脚本
    • 移动开发:Java,C++,Swift
    • 桌面开发:C++,C#,QT+JavaScript都能开发出漂亮的桌面
    • 操作系统:C的天下
    • 虚拟机技术:QEMU,KVM,Xen都是纯C开发的
    • 数据库:C的天下
    • 编译器:C/C++并存
    • 大数据:Java
    • 云存储:Java,Go

    C语言概览

    C语言仅有32个关键字,9种控制语句,34种运算符,却能完成无数的功能。

    GCC环境变量配置

    文件夹规划

    D:workspacecgithubittimelinevs_code 存放使用visual studio code开发的C程序
    D:workspacecgithubittimelinevisual studio 2019 存放使用Visual Studio 2019开发的C程序

    Visual Studio Code 下载、安装

    官网: https://code.visualstudio.com/
    文档:https://code.visualstudio.com/docs

    C语言开发的流程

    一个C语言程序的开发流程包含创建源文件、在源文件中编写业务代码,然后使用编译器编译,最后运行程序。

    C语言开发HelloWorld

    首先使用Visual Studio Code创建源文件helloworld.c,C语言的源文件都是以.c结尾。

    如果使用记事本创建C语言的源文件,可能会看不到文件的后缀名。需要在Windows10系统中设置显示文件扩展名
    显示文件扩展名

    并在源文件中编辑如下内容

    #include <stdio.h>
    int main(int argc,char *argv[]){
        printf("windows10 & visual studio code hello world with c");
        return 0;
    }

    Visual Studio Code编辑helloworld.c
    hello world

    由于源文件helloworld.c的内容计算机无法直接识别,这里需要使用C语言的编译器来将源文件helloworld.c的程序编译成计算机能够识别的指令。

    GCC编译器的安装和配置

    那么如何检查系统的编译环境呢?

    首先使用win+r快捷键打开运行窗口,
    运行窗口
    然后输入cmd,便可以启动Windows终端。
    打开Windows终端
    然后在终端上输入gcc -v便可以查看安装的GCC编译器版本,如果能够输出版本信息表示系统的编译环境安装完毕。
    gcc -v

    如果提示不是内部命令,也不是可以执行的程序,那么需要从官网下载和安装QT(我这里提前安装了QT5.13),QT中包含了gcc编译器。并在系统环境变量中配置GCC的环境变量。

    QT官网:https://www.qt.io/
    QT各个版本下载地址:http://download.qt.io/archive/qt/

    具体的配置方法就是在系统变量中新建GCC_HOME,其属性值默认指向的是GCC所在的目录C:QtQt5.13.0Toolsmingw730_64
    首先使用win+e快捷键打开文件资源管理器,然后找到此电脑,右键选择属性后会进入控制面板->系统和安全->系统的界面,然后找到高级系统设置
    高级系统设置
    在系统属性中找到环境变量
    环境变量

    然后在环境变量中新增系统环境变量GCC_HOME,该变量的值就是gcc编译器所在的目录
    GCC_HOME

    然后在PATH环境变量中引用GCC_HOME的bin目录即可。
    PATH环境变量引用GCC_HOME

    配置完成之后需要重新使用win+r打开运行窗口,然后输入cmd打开Windows终端,并输入gcc -v命令检测当前安装的GCC编译器版本。
    gcc.exe

    当在Windows终端上执行gcc,系统会自动从GCC_HOMEin目录下查找并调用gcc.exe程序编译C语言编写的源文件

    GCC编译源文件

    在编写完C程序(helloworld.c)、安装和配置gcc编译器之后就可以使用gcc来编译源文件

    首先使用visual studio code打开helloworld.c所在的源文件的位置,快捷键是shift+alt+r
    在文件资源管理器中显示

    此时会进入目录D:workspacecittimelinevs_code
    D:workspacecittimelinevs_code

    然后在文件路径地址栏输入cmd后回车
    cmd

    便可以打开终端,而且此时在终端上默认的路径就是D:workspacecittimelinevs_code
    D:workspacecittimelinevs_code

    如果想要知道windows有哪些可以使用的命令,可以使用help命令查看命令的帮助信息
    help

    然后就可以在终端上使用gcc helloworld.c -o helloworld.exe编译源程序,这里的-o helloworld.exe 表示生成的可执行程序的文件名是helloworld.exe。如果不加上-o选项,系统默认生成的可执行程序文件名是a.exe的可执行程序文件名。

    如果编译多个源文件,源文件之间使用空格隔开

     

    gcc编译源文件,生成可执行文件
    gcc编译源文件,生成可执行文件

     

    如果想要在Windows系统的终端上查看指定路径的文件列表,可以使用dir命令,Linux系统是ls命令。
    gcc编译源文件

    编译完成之后如果编译器没有提示语法错误,并且成功生成可执行程序的文件helloworld.exe。
    然后在终端上直接输入helloworld.exe就可以执行运行程序,观察程序的运行结果。
    而helloworld程序的功能就是输出windows10 & visual studio code hello world with c
    运行helloworld

    GCC的编译过程

    GCC编译器在编译C程序的源文件时会经历预处理、编译、汇编、链接四个步骤。

    gcc编译过程编译选项文件后缀名
    预编译 -E .i
    编译 -S .S
    汇编 -c .o
    链接 没有特定的选项 .exe/.out
    • 预处理
      主要是宏替换、头文件包含和条件编译,不会检查程序的语法,预处理生成的文件后缀名是.i
      gcc针对预处理,编译、汇编提供了编译选项,其中预处理是-E选项,这里编写一个gcc_test.c的源文件,来演示gcc的宏替换
    #include <stdio.h>
    //定义一个宏
    #define PI 3.14
    
    int main(int argc,char *argv[]){
        //预处理时会替换成该宏定义的值
        printf("PI=%.2f",PI);
        return 0;
    }

    然后在终端上使用gcc -E gcc_test.c -o gcc_test.i 预编译生成gcc_test.i文件
    gcc -E gcc_test.c -o gcc_test.i

    然后在visual studio code中查看gcc_test.i文件,会发现在与编译期间,gcc_test.i文件中的宏(PI)已经被替换成了对应的值(3.14),而且使用#include<stdio.h>包含的头文件stdio.h的内容已经在预编译生成的gcc_test.i中。
    gcc_test
    对比源文件gcc_test.c和预编译生成的文件gcc_test.i两个文件的大小。
    文件大小

    • 编译
      将预处理好的文件编译成汇编文件,编译生成的汇编文件是.s

    gcc中的编译选项是 -S ,该选项是将预处理好的文件生成汇编指令

    编译的命令如下

    gcc -S gcc_test.c -o gcc_test.s

    生成的汇编文件 gcc_test.s

    	.file	"gcc_test.c"
    	.text
    	.def	__main;	.scl	2;	.type	32;	.endef
    	.section .rdata,"dr"
    .LC1:
    	.ascii "PI=%.2f"
    	.text
    	.globl	main
    	.def	main;	.scl	2;	.type	32;	.endef
    	.seh_proc	main
    main:
    	pushq	%rbp
    	.seh_pushreg	%rbp
    	movq	%rsp, %rbp
    	.seh_setframe	%rbp, 0
    	subq	$32, %rsp
    	.seh_stackalloc	32
    	.seh_endprologue
    	movl	%ecx, 16(%rbp)
    	movq	%rdx, 24(%rbp)
    	call	__main
    	movq	.LC0(%rip), %rax
    	movq	%rax, %rdx
    	movq	%rdx, %xmm1
    	movq	%rax, %rdx
    	leaq	.LC1(%rip), %rcx
    	call	printf
    	movl	$0, %eax
    	addq	$32, %rsp
    	popq	%rbp
    	ret
    	.seh_endproc
    	.section .rdata,"dr"
    	.align 8
    .LC0:
    	.long	1374389535
    	.long	1074339512
    	.ident	"GCC: (x86_64-posix-seh-rev0, Built by MinGW-W64 project) 7.3.0"
    	.def	printf;	.scl	2;	.type	32;	.endef
    

    相对于更低级的汇编代码而言,C语言更加容易上手,也方便后期维护。

    • 汇编
      将汇编文件生成二进制文件,汇编生成的二进制文件是.o

    gcc的汇编选项是-c,其作用是将汇编代码转换成二进制的文件。

    汇编的命令如下

    gcc -c gcc_test.c -o gcc_test.o

    汇编生成的二进制文件无法用文编编辑器打开, 如果强行打开是一堆乱码,文本编辑器Visual Stuido Code无法直接解析二进制文件。
    gcc_test.o

    • 链接
      将各个二进制文件加上库函数和启动代码生成可执行文件。链接生成的文件在Windows下默认是.exe,在linux下是.out。

    gcc的链接没有提供对应的选项,但是当使用gcc gcc_test.c -o gcc_test.exe时, 默认会从预编译、编译、汇编、链接的过程执行。

    图解GCC的编译过程
    GCC编译过程

    Visual Studio Code 配置C/C++环境

    https://www.cnblogs.com/lsgxeva/p/11115650.html

    使用vs编写代码

    在使用Visual Stuido 编写代码前,需要从Visual Studio 官网下载,并安装Visual Studio,然后创建C语言的项目,并且创建和编写源文件,然后使用gcc编译源文件,并且运行程序。

    VS 介绍、下载、安装

    visual studio 官网 : https://visualstudio.microsoft.com/
    visual studio 下载: https://visualstudio.microsoft.com/zh-hans/downloads/
    visual studio 文档: https://docs.microsoft.com/zh-cn/visualstudio/?view=vs-2019

    VS 创建项目

    日常工作中通常是使用集成开发环境来开发项目,相对于普通的文本编辑器(例如Visual Studio Code)而言可以提高工作效率。
    大部分集成开发工具(例如Visual Studio 2019,QT5.13,XCode11.3)都是以项目的形式管理程序,以C语言的项目为例,一个项目可以存放多个C语言的源文件和头文件。

    在下载和安装完成Visual Studio 2019后,可以点击文件->新建->项目(快捷键Ctrl+Shift+N)来创建一个项目。
    新建项目

    然后选择基于C++的空项目
    C++的空项目

    然后设置项目的名称、路径以及所在的解决方案

    Visual Studio 2019中一个解决方案可以包含多个项目

     

    设置项目的名称、路径以及所在的解决方案
    设置项目的名称、路径以及所在的解决方案

    最后点击创建,便可以生成一个名叫c-core-foundational的项目,该项目在c-core解决方案下
    c-core-foundational

     

    VS创建C语言源文件

    解决方案下的项目创建完毕之后,就可以创建C语言的源文件,选中项目,右键添加新建项
    添加新建项

    然后在弹出的添加新项窗口中选择基于C++文件,并且将源文件命名为helloworld.c。

    需要注意的默认的文件名是源.cpp,不要忘记将文件的后缀名改成.c,否则会有意想不到的问题。因为C++的编译器会比C语言更加严格

     

    helloworld.c
    helloworld.c

     

     

    helloworld.c
    helloworld.c

     

    然后编写helloworld,就是向终端输出windows10 & visual studio 2019 hello world with c

    #include <stdio.h>
    int main(int argc,char*argv[]) {
    	printf("windows10 & visual studio 2019 hello world with c");
    
     	return 0;
    
    }

    和之前在visual studio code中编写的helloworld.c不同的是printf()函数传递的参数不同,从而会有不同的输出结果。

    编写完成之后选中项目c-core-foundational,右键在文件资源管理器中打开文件夹
    右键在文件资源管理器中打开文件夹

    然后在地址栏D:workspacecittimelinevisualstuido2019c-corec-core-foundational中输入cmd并回车
    地址栏
    input cmd

    此时会开启一个终端窗口,并且路径就是在项目c-core-foundational所在的路径下
    cmd

    然后可以在终端上调用gcc命令来编译源文件,并且运行可执行文件
    编译源文件,运行可执行文件

    VS创建C语言头文件

    在后期开发过程中还会使用到自定义的头文件。
    在Visual Studio 2019中创建头文件和源文件类似,只需要选择对应的模板即可。

    首先选中项目新建项
    新建项

    然后选择头文件,并命名为common.h
    common.h

    头文件和源文件
    头文件和源文件

    主函数讲解

    int main(int argc, char* argv[]) {
    
    	//如果想要查看printf()函数的定义,可以使用F12查看,然后按ctrl+-返回
    	printf("windows10 & visual studio 2019 hello world with c");
    
    	return 0;
    
    } 

    包丁解牛main函数

    
    
    /*
    
    #开头表示需要预处理,即编译器编译之前处理的事情
    include 表示包含
    而#include <stdio.h> 表示将系统路径下(C:Program Files (x86)Windows Kits10Include10.0.18362.0ucrt)的头文件stdio.h包含(本质是头文件复制)到源文件helloworld.c中
    */
    /*
    	stdio.h
    	std表示标准,意味着该头文件的函数都是可以跨平台(windows,linux,macOS)使用的
    	stdio表示跨平台的输入输出 i表示input,o表示output
    	stdio.h即表示标准的输入输出头文件,用于输入输出的函数(例如printf(),getchar()等等)都位于stdio.h头文件中。C语言将功能相同的多个不同的函数放在同一个头文件中
    */
    #include <stdio.h> // C程序包含头文件不是必须的,因为helloworld中使用了printf()函数,而该函数的定义在stdio.h中,所有使用#include <stido.h>
    //包含头文件表示告诉编译器,printf()函数存在,此处通过编译。
    
    
    /*
    	一个项目(例如这里的c-core-foundational)有且只能有一个主函数,当运行可执行文件的时候,系统会自动调用主函数运行。如果想要其他函数的代码得到执行,其他函数必须直接或者间接被主函数调用
    	主函数也是程序的入口,程序从主函数一行一行执行。
    
    	如果一个项目中定义了多个主函数,程序编译时会报错 error: redefinition of 'main',因为编译器不知道调用哪个主函数
    	
    	
    	main函数的左边有个整数数据类型int,表示为函数执行完成后返回一个整数。
    
    	函数负责用于处理数据并返回对应的执行结果。
    
    	main函数右边的()中的内容是形参,外部数据通过函数的参数传递到函数的内部
    
    	{}表示函数体,{}中包含了函数的所有内容,通常是成对出现的,无论是()还是{}
    
    
    	printf()函数用于数据输出,将""包含的内容输出到终端上。如果想要输出内容后实现换行的效果,可以使用转义字符
    
    
    	;表示一条完整可执行语句的结束标记,这里的printf()函数调用就是一条完整的可执行语句,如果不加上分号,会出现编译错误。
    
    	return 如果后面没有加数据类型表示退出函数,这里结束main函数,return之后的代码都不会再执行
    	return 0 在main函数中表示正常退出,非0表示异常退出。
    
    */
    
    /*
       int main(int argc,char*argv[]) {
    	//如果想要查看printf()函数的定义,可以使用F12查看,然后按ctrl+-返回
    	printf("windows10 & visual studio 2019 hello world with c");
    	return 0;
    
    }
    */
    
    
    int main(int argc, char* argv[]) {
    
    	//如果想要查看printf()函数的定义,可以使用F12查看,然后按ctrl+-返回
    	printf("windows10 & visual studio 2019 hello world with c");
    
    	return 0;
    
    } 
    
    

    行注释与块注释

    注释表示程序的说明,程序开发时可以添加适当的注释,用于描述程序的功能,方便后期维护。
    注释也可以注释部分代码,在程序调试排错时时经常使用。
    注释的内容在编译器预处理时删除。

    C语言的注释分为行注释和块注释
    行注释使用//开头,只能注释一行,而快注释使用/**/,可以注释多行内容,需要注意的是在使用块注释的时候不要嵌套使用,否则程序会出现编译错误。

    system函数

    在使用Windows,Linux,macOS等操作系统时,我们可以在操作系统提供的终端上输入对应的命令来调用程序。
    这里以windows为例,我们可以输入calc命令来调用系统提供的计算器程序,输入mspaint来调用系统提供的画图程序,输入ping www.baidu.com 来检查网络是否通常
    windows命令
    那么如果在C程序中运行系统命名呢?
    这里可以使用C语言的跨平台函数system来调用即可。

    在调用system函数之前,首先需要包含该函数所在的头文件stdlib.h,即#include <stdlib.h>

    然后在使用system函数并传递对应的系统命令即可,系统命令以字符串的方式传递。

    首先需要在项目c-core-foundatiaonal中定义一个源文件system_invoke.c,然后包含头文件以及使用system函数以字符串的方式调用windows提供的命令

    
    #include <stdlib.h>
    int main(int argc,char *argv[]) {
    	
    
    	//system函数的本质就是使用字符串的方式执行命令
    	//调用计算机
    	system("calc");
    	//检测网络
    	system("ping baidu.com");
    	//调用画图板
    	system("mspaint");
    	return 0;
    }

    接着使用gcc编译器编译该源文件并且运行生成的可执行程序system_invoke.exe。
    程序运行时会依次打开计算器,检测网络和调用画图板。
    编译并运行程序

    system阻止vs终端闪退

    在之前的开发程序时,都是使用Visual Studio 2019来开发程序,但是编译时确是使用了GCC编译器来编译某一个源程序。
    实际上Visual Studio 2019也提供了C语言的编译器用于编译C语言源程序,后期编写的程序都会开始采用Visual Studio 2019来开发、编译和运行程序。

    在这之前我们先要解决一个Visual Studio 2019的闪退问题。

    首先编写一段程序,程序的源文件名叫system_pause.c,它是用来向屏幕打印输出跟Tony老师学C语言

    #include <stdio.h>
    
    int main(int argc,char *argv[]) {
    	
    	printf("跟Tony老师学C语言");
    	return 0;
    
    }

    此时的c-core-foundational项目的文件结构是这样的
    文件结构

    那么如何在Visual Studio 2019中编译运行C程序勒,只需要点击本地Windows调试器就可以一次性编译c-core-foundational项目下的所有C程序,并链接生成c-core-foundational.exe
    运行

    但是因为目前c-core-foundational下有多个c语言的源文件,而且每个源文件都是包含了main函数,因此在编译时Visual Studio 2019会提示找到一个或者多个多重定义的符号
    错误提示

    想要解决这个问题就需要将每个源文件的main函数重命名为其他的函数即可,因为Visual Studio 2019中的每个项目只能包含一个main函数。然后再次点击本地Windows调试器,运行程序时不会再提示找到一个或者多个重定义的符号,而是发生了闪退现象,这个现象出现的原因就是因为该程序比较简单,只有一句打印输出的执行语句。程序执行的速度非常快,当程序从main函数开始执行,遇到return 0后程序执行完成,Visual Studio 2019自动关闭了程序运行时所启动的终端,所有就形成了闪退现象。而如果使用gcc编译器编译时不会遇到闪退,因为使用GCC编译器时的终端是我们手动打开的。

    如果想要解决Visual Studio 2019的闪退(程序运行结束后自动关闭终端),可以使用多种方式,例如在程序中调用getchar()函数,该函数也是位于stdio.h头文件中,当用户输入任意字符后退出程序。
    或者使用system("pause")来让程序临时暂停,避免闪退。

    在源文件中加了system("pause")后运行程序,程序会在输出跟Tony老师学C语言并完成换行后会暂停,并提示请输入任意键继续。
    system pause

    vs的快捷键

    快捷键通常是键盘上的多个按键的组合,通过快捷键可以快速实现某些功能。
    Visual Studio 2019提供了丰富的快捷键,来完成程序开发过程中的常用功能。

    快捷键功能
    Ctrl,k,f 自动格式化代码
    Ctrl,k,c 注释选中的代码
    Ctrl,k,u 取消注释的代码
    F9 设置断点
    F5 调试运行
    Ctrl,F5 不调试运行
    Ctrl,Shift,b 编译,不运行
    F10 next调试
    F11 逐语句调试,如果遇到函数会跳到函数内部执行
    F11 逐语句调试,如果遇到函数不会跳到函数内部执行

    Visual Studio 2019调试技巧

    在后期开发程序时,初学者可能会遇到各种各样的问题,有可能是编译错误,编译器会直接提示出错的信息
    而也有可能是程序运行时的逻辑错误,此时就需要通过集成开发环境提供的调试功能来调试程序,查找问题。

    首先在源文件的某行下断点,当程序运行到断点的地方会咋暂停。
    然后使用F5 以调试的模式运行程序,如果函数中调用了其他函数,又想进入其他函数内部调试,可以使用F11,否则使用F10逐过程调试。

     

    Visual Studio 2019调试技巧
    Visual Studio 2019调试技巧

     

    vs的4996错误

    4996是一个错误编号。微软希望程序员使用其提供的非标准c库函数,但是程序员希望使用标准的C库。

    例如用于字符串复制的strcpy函数就是位于标准的C库头文件string.h中,如果使用该函数实现字符串复制

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main(int argc, char* argv[]) {
    
        //初始化一个字符串
        char buf[32] = "";
    
        //使用位于头文件string.h中的strcpy函数将helloworld复制到字符串变量buf中
        strcpy(buf, "hello world");
        //将字符串变量的内容输出来
        printf("buf = %s
    ", buf);
        system("pause");
        return 0;
    
    }

    运行程序时会Visual Studio 2019会提示该函数不是安全的,可以使用strcpy_s函数。
    如果想要禁用这个声明,可以使用#define _CRT_SECURE_NO_WARNINGS来禁用Visual Studio 2019的安全检查,该语句必须要放在源文件的第一行。
    strcpy非安全

    除了#define _CRT_SECURE_NO_WARNINGS来解决Visual Studio 2019的C4996错误之外,还可以使用 #pragma warning(disable:4996) 来解决C4996错误。这个错误是Visual Studio 2019特有的,其他IDE没有。

    //#define _CRT_SECURE_NO_WARNINGS //解决Visual Studio 2019 的C4996错误方案一
    #pragma warning(disable:4996) //解决Visual Studio 2019 的C4996错误方案二
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main(int argc, char* argv[]) {
    
        //初始化一个字符串
        char buf[32] = "";
    
        //使用位于头文件string.h中的strcpy函数将helloworld复制到字符串变量buf中
        strcpy(buf, "hello world");
        //将字符串变量的内容输出来
        printf("buf = %s
    ", buf);
        system("pause");
        return 0;
    
    }

    vs的代码片段

    在编写C程序时,要解决Visual Studio 2019的C4006的错误,会使用宏定义#define _CRT_SECURE_NO_WARNINGS,同时会包含一些必备的头文件,例如#include <stdio.h>,#include <stdlib.h>,而且源文件如果想要可以运行,还必须包包含固定格式的main函数,以及本人想添加一个注释模板,用于程序的说明。

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <stdlib.h>
    /*
    
    	@author liuguanglei ittimelinedotnet@gmail.com
    	@wechat 18601767221
    	@website ittimeline.net
    	@version
    */
    int main(int argc, char* argv[])
    {
    	system("pause");
    	return 0;
    }

    这些内容的格式都是固定的,可以使用Visual Studio 2019的代码片段功能,通过设置快捷键来快速生成模板。

    首先准备一个名为c_code_template.snippet的代码片段文件,

    <?xml version="1.0" encoding="utf-8"?>
    <CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
    	<CodeSnippet Format="1.0.0">
    		<Header>
    			<Title>MyCCodeTemplate</Title>
    			<Shortcut>ct</Shortcut>
    			<Description>c的标准模板代码</Description>
    			<Author>Microsoft Corporation</Author>
    			<SnippetTypes>
    				<SnippetType>Expansion</SnippetType>
    				<SnippetType>SurroundsWith</SnippetType>
    			</SnippetTypes>
    		</Header>
    		<Snippet>
    			<Code Language="cpp">
                <![CDATA[#define _CRT_SECURE_NO_WARNINGS
    			#include <stdio.h>
    			#include <stdlib.h>
          /*
            
              @author liuguanglei ittimelinedotnet@gmail.com
    		  @wechat 18601767221
    		  @website ittimeline.net
    		  @version 
          */
    			int main(int argc, char *argv[])
    			{
    				system("pause");
    				return 0;
    			}]]>
    			</Code>
    		</Snippet>
    	</CodeSnippet>
    </CodeSnippets>

    然后将该文件添加到Visual Studio 2019中,在Visual Studio 2019的菜单 工具->代码片段管理
    代码片段管理器

    然后在代码片段管理器窗口选择语言是Visual C++,位置选择My Code Snippets

     

    导入
    导入

    然后选择导入c.snippet文件
    c_code_template.snippet

     

    为导入的代码片段选择一个位置
    位置

    然后点击确定即可
    确定

    由于在c_code_template.snippet文件中设置了<Shortcut>ct</Shortcut>,也就意味着在C语言的源文件中输入ct就可以生成如下模板

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <stdlib.h>
    /*
    
    	@author liuguanglei ittimelinedotnet@gmail.com
    	@wechat 18601767221
    	@website ittimeline.net
    	@version
    */
    int main(int argc, char* argv[])
    {
    	system("pause");
    	return 0;
    }

    使用Qt Creator创建C程序

    Qt Creator是一个跨平台的集成开发环境,支持Windows,Linux,macOS。
    这里使用Windows+Qt Creator来开发C程序,用于对比Visual Studio 2019两者之间的差异。

    Qt下载地址:http://download.qt.io/archive/qt/

    Qt启动界面
    Qt启动

    在下载和安装完成Qt后,启动Qt,创建项目
    New Project

    然后选择Non-Qt project -> Plain C Application
    Plain C Application

    然后设置项目名和路径

    项目名和路径名称都不能有中文

     

    项目名和路径
    项目名和路径

     

    然后设置编译系统
    qmake

    然后选择编译工具
    编译工具

    然后配置项目管理
    为了简单,我这里就不做任何配置了
    配置项目管理

    到这里基于Qt5.13的项目就创建成功了

    其中main.c和c-core.pro是Qt自动生成的
    c-core by qt

    然后可以点击左下角的按钮运行程序

    左下角三个按钮的功能依次是不调试运行、调试运行和编译
    不调试运行

  • 相关阅读:
    vbscript错误代码及对应解释大全(希望还没过时)
    对象存储服务MinIO安装部署分布式及Spring Boot项目实现文件上传下载
    一道算法题,求更好的解法
    浅谈SQLite——实现与应用
    Linux网络协议栈(二)——套接字缓存(socket buffer)
    服务器开发入门——理解异步I/O
    理解MySQL——复制(Replication)
    线性时间排序算法
    Linux网络协议栈(一)——Socket入门(2)
    理解MySQL——索引与优化
  • 原文地址:https://www.cnblogs.com/ittimeline/p/12431209.html
Copyright © 2011-2022 走看看