您当前的位置: 首页 >  linux

彭世瑜

暂无认证

  • 0浏览

    0关注

    2791博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

笔记:Linux C语言编程基本原理与实践

彭世瑜 发布时间:2021-03-09 23:09:35 ,浏览量:0

C语言简介

C语言的标准:ANSI C

C语言的特点:

  • 简单
  • 快速
  • 高性能
  • 兼容性好
  • 功能强大
  • 易于学习

C语言的应用: 1、Linux嵌入式(小工具)(C语言小巧灵活、语法简单、适合做小工具) linux/unix系统就是由各种各样的小工具集成得来的。

2、和硬件打交道的程序 a、操作系统:苹果系统,安卓系统,windoows b、ARM嵌入式、单片机、Arduino

3、有高性能要求的应用程序 著名的WEB服务器,NGINX=apache*10

环境
  • centos https://www.centos.org/
  • ubuntu https://ubuntu.com/
常用指令
# ubuntu 安装vim编辑器
$ apt-get update
$ apt-get install vim

# 编译器
$ cc -v
$ gcc -v

VIM命令模式

i    (插入模式 或 当前光标前插入字符)
Esc     (返回命令行模式)
:w    (保存)
a    (当前光标后插入字符)
:q     (退出VIM)
Shitf + a   (在行尾插入字符)
Shift + i   (在行手插入字符)
o      (下一行插入字符)
Shift + o   (在当前行上行插入字符)
x     (删除单个字符)
dd    (删除整行字符)
C程序

hello.c

#include 

int main(){
    printf("hello world\n");
    return 0;
}

编译执行

# 编译
$ cc hello.c 
# 或者
$ gcc hello.c

# 执行
$ ./a.out
代码分布在多个源文件

1、放在一个文件

hello.c

#include   // 系统目录中查找

int max(int a, int b){
    if (a > b) {
        return a;
    } else {
        return b;
    }
}

int main(){
    int a = 1;
    int b = 2;
    int ret = max(a, b);
    printf("max value is %d\n", ret);
    // max value is 2
    return 0;
}

编译执行 执行输出文件,默认是a.out

$ gcc hello.c -o hello.out

$ ./hello.out

2、放在多个文件

hello.c

#include   // 系统目录中查找

int main(){
    int a = 1;
    int b = 2;
    int ret = max(a, b);
    printf("max value is %d\n", ret);
    // max value is 2
    return 0;
}

max.c

int max(int a, int b){
    if (a > b) {
        return a;
    } else {
        return b;
    }
}

多文件编译执行

$ gcc max.c hello.c -o hello.out

$ ./hello.out

此时会有警告

3、声明引用

hello.c

#include   // 系统目录中查找
#include "max.c"    // 相对目录中查找

int main(){
    int a = 1;
    int b = 2;
    int ret = max(a, b);
    printf("max value is %d\n", ret);
    // max value is 2
    return 0;
}

编译执行

$ gcc hello.c -o hello.out

$ ./hello.out
头文件与函数定义分离

1、两个文件分别编译

gcc参数:

-c compile 只编译源文件但不链接 *.o
-o out 指定输出文件名 默认a.out

分开编译需要注释include

#include   // 系统目录中查找
// #include "max.c"    // 相对目录中查找

int main(){
    int a = 1;
    int b = 3;
    int ret = max(a, b);
    printf("max value is %d\n", ret);
    // max value is 2
    return 0;
}

编译源文件

# 先编译max.c文件
$ gcc -c max.c -o max.o

# 再编译hello.c文件
$ gcc max.o hello.c

2、三个文件分别编译

min.c

int min(int a, int b){
    if (a > b) {
        return a;
    } else {
        return b;
    }
}

hello.c

#include 

int main(){
    int a = 1;
    int b = 3;
    
    int maxValue = max(a, b);
    printf("max value is %d\n", maxValue);

    int minValue = min(a, b);
    printf("min value is %d\n", minValue);
    
    return 0;
}
# 编译min.c
$ gcc -c min.c

# 编译hello.c
$ gcc min.o max.o hello.c -o hello.out

3、引入头文件

min.h

int min(int a, int b);

max.h

int max(int a, int b);

hello.c

#include   // 系统目录中查找
#include "min.h"    // 引入头文件
#include "max.h"    

int main(){
    int a = 1;
    int b = 3;
    
    int maxValue = max(a, b);
    printf("max value is %d\n", maxValue);

    int minValue = min(a, b);
    printf("min value is %d\n", minValue);
    
    return 0;
}

编译执行

$ gcc min.o max.o hello.c -o hello.out

$ ./hello.out
Makefile
# 删除所有.o结尾的文件
$ rm *.o

make工具可以将大型的开发项目分成若干个模块

make内部使用了gcc

$ apt-get install make

$ make -v

Makefile 使用tab缩进

# 注释
hello.out:max.o min.o hello.c
    gcc max.o min.o hello.c -o hello.out
max.o:max.c
    gcc -c max.c
min.o:min.c
    gcc -c min.c

执行编译

$ make
main函数中的return

main.c

# include 

int main(int argv, char* argc[]){
    printf("hello world\n");
    return 0;
}

查看程序返回

# 编译并执行程序
gcc main.c -o main.out && ./main.out

# 查看程序运行结果
$ echo $?
main函数中的参数

main.c

# include 

int main(int argv, char* argc[]){
    for(int i=0; i > a.txt 

# 或者
$ ./mian.out >> a.txt 

# 覆盖
$ ./mian.out > a.txt  

输出结果 a.txt

input a:
input b:
a + b = 8

2、输入流重定向

输入文件 input.txt

3
4
$ ./main.out  0){
        printf("value %d > 0\n", a);
        return 0;
    } else{
        fprintf(stderr, "value %d < 0\n", a);
        return 1;
    }
}
$ ./main.out 1>stdout.txt 2>stderr.txt

4、同时操作标准输入、标准输出、错误流 stdin.txt

-10

执行程序

$ ./main.out 1>stdout.txt 2>stderr.txt             
关注
打赏
1665367115
查看更多评论
0.0829s