C语言的helloworld深入理解
2017-12-18 13:46
405 查看
读完本章节,你将收获以下几点
Windows和Linux(Ubuntu)上较为完整的C语言程序开发流程(编辑、编译、运行、调试)
helloworld程序的详细细节
VisualStudio2017的调试基本使用
C语言编写应用程序可以采用任意的编辑器(例如跨平台的SublimeText和Atom和之前介绍的各个主流操作系统的集成开发工具)来编写,通常编译器要求C程序的源代码文件是以.c作为源文件扩展名。
helloworld.c源代码文件的代码如下:
1 找到VS 2017的开发人员命令提示符
然后采用Visual Studio 2017提供的cl命令来编译源文件,并运行helloworld.exe
,如下图所示
首次安装Ubuntu系统需要先给root用户设置密码,命令如下
然后安装vim编辑器,命令如下
然后使用vim编辑源文件代码
此时vim默认处于命令模式,需要输入字符 i 来进入编辑模式,编辑的内容如下:
编辑完成之后按esc :wq便可以保存文件并退出vim编辑器,然后使用 gcc编译器编译源文件,再运行程序。
但是Windows上编译后的C程序不能在类Unix操作系统(Unix,Linux,MacOS,Android,IOS)上执行。
32位Linux操作系统上编写的程序也不能到64位Linux上运行,Windows上的32位应用程序可以到64位Windows系统上运行,Windows 64位系统兼容32位的应用程序。
各个操作系统的可执行程序的格式是不一样的,Windows通常是.exe结尾,而Linux通常是不区分文件后缀名。
C语言的编译器编译程序时比较松散,在编译正确的情况下也不保证程序正确,因此我们在编写程序时必须要严格遵守C语言规范。
在使用VisualStudio编写基于控制台的C程序时,通常最后一行需要加入getchar()函数或者调用system(“pause”),不然程序会运行后关闭控制台,不方便查看程序的执行结果。
在预编译期间将位于系统路径下的stdio.h头文件的内容复制到helloworld.c中,而stdio.h头文件中包含了c语言标准库函数用于数据的输入输出实现的函数声明,如果想调用某个函数(例如printf),必须将函数所在的头文件使用#<头文件的名称> 包含到源文件中。
首先自定义头文件include.h ,头文件内容如下
然后定义源文件include_sample.c,源文件内容如下
编译运行的结果得知include.h的内容在预编译时已经复制到include_sample.c中,输出如下结果:
关于头文件的查找原则说明
当头文件位于当前项目的路径下可以使用#include “头文件名”,系统会先在当前目录下查找头文件,如果没有找到则会在系统目录下查找头文件 ,而系统路径下使用#include <头文件名> ,通常情况下”“可以替换<>
优秀的程序员应该多写注释,因为在程序开发过程中,如果业务逻辑越复杂,注释就显得尤为重要,因为可能过了一段时间(几个月)后如果不仔细阅读代码,就可能忘记程序的业务功能(好记性不如烂笔头)。
在程序排错的过程中也可以通过注释部分代码来调试程序。
编译器在编译程序时,会删除注释的内容。
单行注释和多行注释的案例如下代码所示
如果不需要兼容C++, 可以声明成返回类型为void
如果想自定义函数完成特定的业务逻辑 ,C语言函数声的格式为:
main函数是一个特殊的函数,所有的代码从此处开始执行,而且一个C程序只能有一个main函数 ,如果没有main函数编译会出错。
而且每一个语句都要使用分号(;)作为结束。
返回值类型可以是C语言支持的数据类型,后续会深入学习
函数或者变量命名需要遵守以字母开头,可以包含字母和数字以及下划线,C语言严格区分大小写 。
(**参数列表**) 表示程序运行时需要传递的数据,例如函数如果为了完成两个整数的相加就需要传递两个整数,void表示没有参数。
{函数体}中包含了程序需要完成的业务逻辑,函数体中也可以有多个代码块({}),如下图所示。
因为该函数的声明位于 系统路径下的stdio.h头文件中,需要使用#include包含进来后使用,r如下应用程序所示。
当printf输出到网页时,需要提前声明Content-Type,如下应用案例所示
然后把编译生成的exe程序名称改成homepage.cgi,放到Apache服务器的cgi-bin目录下,启动服务器,然后通过浏览器访问127.0.0.1/cgi-bin/homepage.cgi,如下图示:
return语句还可在普通函数中使用,可以声明一个变量保存函数执行的结果。
VisualStudio2017的下断点和调试功能如下所示
首先设置断点,然后按快捷键F5启动调试
可以通过VisualStudio提供的查看内存、寄存器、反汇编等功能更好的获取程序的运行时信息
Windows和Linux(Ubuntu)上较为完整的C语言程序开发流程(编辑、编译、运行、调试)
helloworld程序的详细细节
VisualStudio2017的调试基本使用
C语言编写应用程序可以采用任意的编辑器(例如跨平台的SublimeText和Atom和之前介绍的各个主流操作系统的集成开发工具)来编写,通常编译器要求C程序的源代码文件是以.c作为源文件扩展名。
helloworld.c源代码文件的代码如下:
#include <stdio.h> /* * C语言的helloworld实现 * @author tony ittimeline@163.com * @date 2017/10/15 17:13 * @website www.ittimeline.net */ int main(void){ printf("Hello World\n"); return 0; }
Windows平台编译和运行helloworld
环境说明: Windwow10创意正式版+VisualStudio20171 找到VS 2017的开发人员命令提示符
然后采用Visual Studio 2017提供的cl命令来编译源文件,并运行helloworld.exe
,如下图所示
Linux平台编译和运行helloworld
环境说明 Linux(Ubuntu+vim)首次安装Ubuntu系统需要先给root用户设置密码,命令如下
tony@ubuntu:~/Desktop$ sudo passwd root [sudo] password for tony: Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully
然后安装vim编辑器,命令如下
root@ubuntu:/home/tony# apt install vim root@ubuntu:~# su tony #切换回tony用户 tony@ubuntu:~$ cd Desktop/ tony@ubuntu:~/Desktop$ #返回到桌面
然后使用vim编辑源文件代码
tony@ubuntu:~/Desktop$ vim helloworld.c
此时vim默认处于命令模式,需要输入字符 i 来进入编辑模式,编辑的内容如下:
编辑完成之后按esc :wq便可以保存文件并退出vim编辑器,然后使用 gcc编译器编译源文件,再运行程序。
tony@ubuntu:~/Desktop$ gcc -o helloworld.o helloworld.c tony@ubuntu:~/Desktop$ ./helloworld.o hello world in linux(ubuntu)
编译和运行注意事项
C语言编写的源代码如果没有依赖特定的系统平台库可以在任何安装C编译器的平台上编译、链接后运行(一次编写,到处编译 ),但是Windows上编译后的C程序不能在类Unix操作系统(Unix,Linux,MacOS,Android,IOS)上执行。
32位Linux操作系统上编写的程序也不能到64位Linux上运行,Windows上的32位应用程序可以到64位Windows系统上运行,Windows 64位系统兼容32位的应用程序。
各个操作系统的可执行程序的格式是不一样的,Windows通常是.exe结尾,而Linux通常是不区分文件后缀名。
C语言的编译器编译程序时比较松散,在编译正确的情况下也不保证程序正确,因此我们在编写程序时必须要严格遵守C语言规范。
在使用VisualStudio编写基于控制台的C程序时,通常最后一行需要加入getchar()函数或者调用system(“pause”),不然程序会运行后关闭控制台,不方便查看程序的执行结果。
helloworld详解
#include <stdio.h> /* * C语言的HelloWorld实现 * @author tony ittimeline@163.com * @date 2017/10/15 17:13 * @website www.ittimeline.net */ int main(void){ printf("Hello World\n"); //打印输出HelloWorld并换行 return 0; }
#include <stdio.h>
在预编译期间将位于系统路径下的stdio.h头文件的内容复制到helloworld.c中,而stdio.h头文件中包含了c语言标准库函数用于数据的输入输出实现的函数声明,如果想调用某个函数(例如printf),必须将函数所在的头文件使用#<头文件的名称> 包含到源文件中。
#include的本质说明
环境说明: Windows10+VisualStudio2017首先自定义头文件include.h ,头文件内容如下
#pragma once #include <stdio.h> void main(void) { printf("hello world in Visual Studio 2017 With Windows10 \n"); getchar();//等待输入任意字符退出 return; }
然后定义源文件include_sample.c,源文件内容如下
#include "include.h"
编译运行的结果得知include.h的内容在预编译时已经复制到include_sample.c中,输出如下结果:
关于头文件的查找原则说明
当头文件位于当前项目的路径下可以使用#include “头文件名”,系统会先在当前目录下查找头文件,如果没有找到则会在系统目录下查找头文件 ,而系统路径下使用#include <头文件名> ,通常情况下”“可以替换<>
C语言注释
注释用于描述程序的功能说明以及相关信息,增加代码的可读性,便于后期的维护,C语言支持单行注释(//)和多行注释(/**/),其中需要注意的是多行注释不能嵌套使用,否则会发生编译错误。优秀的程序员应该多写注释,因为在程序开发过程中,如果业务逻辑越复杂,注释就显得尤为重要,因为可能过了一段时间(几个月)后如果不仔细阅读代码,就可能忘记程序的业务功能(好记性不如烂笔头)。
在程序排错的过程中也可以通过注释部分代码来调试程序。
编译器在编译程序时,会删除注释的内容。
单行注释和多行注释的案例如下代码所示
#include <stdio.h> /* * C语言的HelloWorld实现 * @author tony ittimeline@163.com * @website www.ittimeline.net * @date 2017/10/15 17:13 */ int main(void){ printf("Hello World\n"); //打印输出HelloWorld并换行 return 0; }
C语言main函数
最简单的写法如下所示,C语言的main函数如果兼容C++的编译器,必须声明成返回类型为int,并返回对应的0或者-1,通常情况下return 0表示程序执行成功,return -1表示程序执行失败。int main(void){ //待执行的业务逻辑 return 0; }
如果不需要兼容C++, 可以声明成返回类型为void
void main(void){ //待执行的业务逻辑 }
如果想自定义函数完成特定的业务逻辑 ,C语言函数声的格式为:
返回值类型 函数名称(参数列表){ //函数体 也就是函数需要完成的功能 return 返回值类型的值; }
main函数是一个特殊的函数,所有的代码从此处开始执行,而且一个C程序只能有一个main函数 ,如果没有main函数编译会出错。
而且每一个语句都要使用分号(;)作为结束。
返回值类型可以是C语言支持的数据类型,后续会深入学习
函数或者变量命名需要遵守以字母开头,可以包含字母和数字以及下划线,C语言严格区分大小写 。
(**参数列表**) 表示程序运行时需要传递的数据,例如函数如果为了完成两个整数的相加就需要传递两个整数,void表示没有参数。
{函数体}中包含了程序需要完成的业务逻辑,函数体中也可以有多个代码块({}),如下图所示。
printf函数
该函数用于向标准输出设备格式化输出数据,除了之前演示的输出到终端(默认),当然还可以输出到文件,网页,打印机等等。因为该函数的声明位于 系统路径下的stdio.h头文件中,需要使用#include包含进来后使用,r如下应用程序所示。
#include <stdio.h> int main(){ printf("hello world\n"); //\n表示转义字符 实现换的功能 return 1; }
当printf输出到网页时,需要提前声明Content-Type,如下应用案例所示
#include <stdio /* 使用printf输出数据到网页 @author tony ittimeline@163.com @date 2017/12/03 13:07 @website www.ittimeline.net */ int main() { printf("Content-ype:text/html\n\n"); //声明HTML语言 printf("我的第一个网页应用程序"); return 0; }
然后把编译生成的exe程序名称改成homepage.cgi,放到Apache服务器的cgi-bin目录下,启动服务器,然后通过浏览器访问127.0.0.1/cgi-bin/homepage.cgi,如下图示:
return语句
return 表示退出函数,而return 0 表示方法返回0,这里return 0是返回给操作系统系统执行成功,而通常返回-1表示程序运行失败。return语句之后的语句都不会执行。#include <stdio.h> /* * return的案例 * return之后的代码都不会执行 @author tony ittlimeline@163.com @date 2017/10/18 23:10 */ int main(void ) { printf("before return\n"); getchar();//等待输入任意字符退出 return 0; printf("after return"); }
return语句还可在普通函数中使用,可以声明一个变量保存函数执行的结果。
#include <stdio.h> /* * 定义一个函数,返回两个整数相加的结果 * @author tony ittimeline@163.com * @date 2017/10/31/ 11:24 * @website www.ittimeline.net */ int add( int one,int two) { return one + two; } /* * return的使用 * @author tony ittimeline@163.com * @date 2017/10/31/ 11:24 * @website www.ittimeline.net */ int main() { //定义变量保存调用add方法的执行结果,并传递两个整数参数 int result = add(10,20); printf("10 + 20 = %d\n",result); return 0; }
使用VisualStudio2017调试程序
在程序员的生涯中除了编码以外,绝大部分工作都是在优化程序(通过版本迭代),解决QA团队测试出来的各种Bug,因此我们必须学会调试程序,通过下断点中断程序,观察程序执行过程中变量的值是否符合预期,如果不符合,则需要修改或者优化程序逻辑。VisualStudio2017的下断点和调试功能如下所示
首先设置断点,然后按快捷键F5启动调试
可以通过VisualStudio提供的查看内存、寄存器、反汇编等功能更好的获取程序的运行时信息
相关文章推荐
- 【笔试面试知识点查缺补漏深入理解之C与C++篇】C语言中的函数realloc()
- 深入理解C语言指针的奥秘
- 深入理解c语言——'\0','0',"0" ,0之间的区别
- 深入理解C语言指针的奥秘(上)
- 深入理解C语言内存管理
- 深入理解C语言指针的奥秘
- 深入理解C语言指针的奥秘
- 深入理解C语言指针的奥秘
- 深入理解C语言
- 深入理解C语言中两级指针(char **pptr)的参数的用法
- C语言:深入理解C语言指针的奥秘
- 深入理解Java HelloWorld
- 深入理解 Java HelloWorld
- c语言深入理解<2>
- 深入理解C语言指针的奥秘
- 深入理解C语言
- 深入理解Java HelloWorld
- 基于C语言sprintf函数的深入理解
- 深入理解C语言