您的位置:首页 > 编程语言 > C语言/C++

C语言的helloworld深入理解

2017-12-18 13:46 405 查看
读完本章节,你将收获以下几点

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创意正式版+VisualStudio2017

1 找到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提供的查看内存、寄存器、反汇编等功能更好的获取程序的运行时信息

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: