对于编程语言来讲,常常看到有由于各自支持的语言阵营而互怼的,其实根本没那个必要,都只是一种工具而已。当多数主流语言都会使用时也许你就不会有偏见了,本质不过都是用来描述计算机的一个任务,只是每门语言设计时考虑的侧重点不同而已。你们最好不要停留在语言层面去争执,不如把时间花在计算机实现原理和结构的本质上,这样更能理解编程语言每一行描述的东西在计算机是干什么的。linux
C语言是最经典的语言,不少其余语言的运行环境也是用C来写的,对于写程序的人则能不懂C语言呢!提到C首先必然会让人关联到指针,当年在大学让你困惑的指针倒是C语言威力无穷的基础。C语言可能从更高层面的设计和编写效率上有所欠缺,但却足够经典且容易操控底层。指针虽然风险不小,但却十分强大。此外ANSI C也加强了C程序在不一样操做系统的迁移性,下面列一些C语言的一些基础知识。编程
C/C++的学习裙【七一二 二八四 七零五 】,不管你是小白仍是进阶者,是想转行仍是想入行均可以来了解一块儿进步一块儿学习!裙内有开发工具,不少干货和技术资料分享!windows
编写好的C程序须要先编译成可执行的机器指令才能运行,这即是翻译工做。翻译的主要步骤是编译和连接,编译就是源代码到目标代码,而连接是将各个目标文件连接起来从而造成一个可执行的程序,固然连接器也会引入被程序所用到的全部标准C函数库的函数。有时编译过程还会将预处理做为一个阶段,它主要是对源文件进行一些处理,好比将#define替换成实际值、将#include指定的文件内容填充进来。下面是使用gcc来编译并连接的例子,通过编译和连接后获得可执行程序,这两个步骤经过gcc来完成,命令为gcc hello.c -o hello,最终运行./hello会输出“hello world”。编程语言
#include<stdio.h> int main() { printf("hello world"); }
假如咱们编写了多个c文件,则编译器会分别编译成多个obj目标文件,而后再经过连接器将全部目标文件连接起来生成可执行文件。函数
注意windows系统的目标文件扩展名为obj,通常连接完成后也不会被删除。而unix-like系统的目标文件扩展名为o,通常在连接完成后会被删除。windows系统的可执行文件扩展名为exe,而unix-like系统的可执行文件名能够任意命名。此外,C语言源文件通常后缀为c,而头文件后缀为h,虽然没有强制规定但你们都会去遵照这个约定。工具
翻译阶段须要将C语言代码变为可执行程序,这些工做由C编译器完成。C编译器也有不少,常见的以下:学习
以linux系统的gcc为例,看几个编译例子。假如hello.c的代码以下,开发工具
#include<stdio.h> int main() { printf("hello world"); }
咱们直接使用以下的gcc命令对其进行编译,并且不带任何参数,此时将生成一个名为out.a的可执行文件,经过./a.out可以输出“hello world”。spa
gcc hello.c
假如添加name.h/name.c和adder.h/adder.c两对头文件和源文件,并且将hello.c稍做修改,三个文件代码分别以下。操作系统
//name.h char* get_name(); //name.c char* get_name() { char* name = "seaboat : "; return name; }
//adder.h int add(int a, int b); //adder.c int add(int a, int b) { return (a + b); }
//hello.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include"adder.h" #include"name.h" int main() { char* name = get_name(); char* hello = "hello world"; char* output = (char*)malloc(strlen(hello) + strlen(name)); sprintf(output, "%s%s", name, hello); printf("%s\n", output); int a = 1; int b = 3; printf("a + b = %d\n", add(a, b)); }
则经过以下的命令能够对多个源文件进行编译和连接,最终生成一个名为a.out的可执行文件。当咱们经过./a.out执行可执行文件时,它将输出“seaboat : hello world a + b = 4”。
gcc name.c adder.c hello.c
咱们还能够经过下面两个命令对name.c和adder.c两个文件编译生成目标文件,分别为adder.o和name.o。而后再经过下面第三行命令来编译hello.c源文件,编译完后它会自动与name.o和adder.o两个目标文件进行链接。
gcc -c adder.c gcc -c name.c gcc name.o adder.o hello.c
此外,还可以经过下面的命令来给多个源文件进行编译并生成各自对应的目标文件,这意味着不对它们进行连接。
gcc -c name.c adder.c hello.c
对于多个目标文件,若是要将他们连接能够经过下面的命令,便可以生成可执行文件。
gcc name.o adder.o hello.o
若是咱们想对生成的可执行文件进行命名,那么能够经过下面第一行命令来实现,将生成一个名为hello的可执行文件。相似地,也能够对多个目标文件进行链接时指定可执行文件名,以下面第二行命令,将生成一个名为hello2的可执行文件。
gcc name.c adder.c hello.c -o hello gcc name.o adder.o hello.o -o hello2
编写C语言时源代码能够包括以下字符集:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z
0 1 2 3 4 5 6 7 8 9
! " # % & ' () * + , - . / : ; < = > ? [ ] \ ^ _ { } | ~
空格、水平制表符、垂直制表符、换行、换页
C语言提供的注释方式有两种:以/*开始而以*/结束来注释多行代码,以//开始来注释单行代码。通常来讲对源码中进行注释则意味着编译时会被预处理器清除掉,用空格来替代。
/* 第一种注释方式 */ //第二种注释方式
标识符就是咱们开发人员对变量、函数、类型、结构体、宏等等的起名,C语言也要求咱们要按照它的规定来取名。按照规定,标识符能够由英文大小写字母(A~Z, a~z)、阿拉伯数字(0~9)、和下划线(_)组成。须要注意如下几点:
固然C语言还保留了32个特殊的关键词,咱们命名的标识符不能与它们相同,不然就会报错。这32个关键词以下:
做者:超人汪小建来源:掘金