C 语言教程

C 语言是一种通用的、面向过程式的计算机程序设计语言。1972 年,为了移植与开发 UNIX 操作系统,丹尼斯·里奇在贝尔电话实验室设计开发了 C 语言。

C 语言是一种广泛使用的计算机语言,它与 Java 编程语言一样普及,二者在现代软件程序员之间都得到广泛使用。

当前最新的 C 语言标准为 C18 ,在它之前的 C 语言标准有 C17、C11...C99 等。

现在开始学习 C 编程!

C 在线工具

谁适合阅读本教程?

本教程是专门为需要从零开始了解 C 语言的软件程序员打造的。本教程将让您对 C 语言有足够的认识,从而提升您自己的专业知识水平。

阅读本教程前,您需要了解的知识:

在开始学习本教程之前,您需要对计算机编程术语有基本的了解。对任何一种编程语言有基本的了解将有助于您理解 C 语言编程概念,并有助于加快您的学习进度。

编译/执行 C 程序

#include <stdio.h>
 
int main()
{
    /* 我的第一个 C 程序 */
    printf("Hello, World! \n");
 
    return 0;
}

实例解析:

  • 所有的 C 语言程序都需要包含 main() 函数。 代码从 main() 函数开始执行。
  • /* ... */ 用于注释说明。
  • printf() 用于格式化输出到屏幕。printf() 函数在 "stdio.h" 头文件中声明。
  • stdio.h 是一个头文件 (标准输入输出头文件) , #include 是一个预处理命令,用来引入头文件。 当编译器遇到 printf() 函数时,如果没有找到 stdio.h 头文件,会发生编译错误。
  • return 0; 语句用于表示退出程序。

main 函数:

运行 C 程序,main(int argc, char *argv[]) 函数传参,argc 为参数个数,argv 是字符串数组, 下标从 0 开始,第一个存放的是可执行程序的文件名字,然后依次存放传入的参数,举个例子 HelloWorld.c :

实例

#include <stdio.h> 

int main(int argc, char *argv[])
{ 
    /* 我的第一个 C 程序 */ 
    printf("可执行程序 %s ,参数个数为[%d], 运行输出:[%s]\n",argv[0],argc,argv[1]); 
    return 0;
}

编译 gcc HelloWorld.c,得到可执行程序 a.out,运行程序:

实例

./a.out Hello,World!
可执行程序 ./a.out ,参数个数为[2], 运行输出:[Hello,World!]

当是 int main() 时,main() 的返回值是 int 类型,所以是 return 0; 现在 C 标准里规定 main() 返回值必须为 int,所以必须写成是 int main()

#include <stdio.h>
int main(){
    /* 我的第一个 C 程序 */
    printf("Hello, World!\n");
    return 0;
}

当是 void main() 时,main() 的返回值是空,所以可以不写或者是 return; 但这是以前的写法了,现在很少用 void main() 了,也不推荐大家这么用。写出来的目的就是给大家提个醒,别犯一些低级错误。

#include <stdio.h>
void main(){
    /* 我的第一个 C 程序 */
    printf("Hello, World!\n");
    return ;
}

warning: implicitly declaring library function 'printf' with type'int (const char *, ...)' [-Wimplicit-function-declaration]

以上警告一般发生在没有包含头文件 #include <stdio.h> 就使用 printf 的情况

int main(){
    printf("Hello, World!\n");
    return 0;
}

这句话提示的意思是:用类型“int (const char *,...)”隐式声明了库函数printf。

该提示的背景知识:因为 printf 这一类库函数太常用了,所以编译器在编译的时候,发现源文件中并没有声明 printf 这个函数就直接使用了它,那么编译器就会为 printf 函数隐式生成一个声明。你那个编译器提示你,它为printf生成的隐式声明是:int printf(const char *, ...)

该提示后果:通常情况下,这个提示只是一个 warning,而不是 error,编译仍然可以通过。

解决方案:要消除这个提示,只要加上 printf 的声明就行了。printf 函数是一个库函数,它的声明在 stdio.h 文件里。所以,你只要在源文件中 #include <stdio.h> 就可以了。

#include<stdio.h>  

/*
这一句话是必须要的格式
stdio 表示系统文件库, 也可以声明其它的
.h  表示头文件,因为这些文件都是放在程序各文件的开头
#include 告诉预处理器将指定头文件的内容插入到预处理器命令的相应位  导入头文件的预编译指令
<> 表示系统自带的库
也可以写成" " 表示用户自定义的库
如果写成" "并且自定义的库里面没有这个文件系统会自动查找自带的库,如果还是没有报错
*/

int main() // 程序的入口
{ //程序从这里开始运行
/*
int 表示数字格式,返回一个数字
main()主函数 表示程序的入口  一个程序有且只能有一个main函数的存在
*/
printf("hello C"); //打印一个hello C
return 0; //返回一个整数0,因为它是int类型,所以只能返回整数
}  //程序从这里结束