C语言学习笔记(嵌入式C/C++)

GCC工具:

        GCC(GNU Compiler Collection,GNU编译器套件)是由GNU开发的编程语言编译器。GNU编译器套件包括C、C++、 Objective-C、 FortranJavaAdaGo语言前端,也包括了这些语言的库(如libstdc++,libgcj等。) [1]

GCC的初衷是为GNU操作系统专门编写的一款编译器;

通俗的理解:就是将人力的编程语言转换成机器可以识别的语言。

Ubuntu安装GCC工具

1.更新软件包列表‌(确保使用最新源):

sudo apt update

2.安装 GCC:

sudo apt install gcc

3.安装成功后查看GCC版本

gcc -v

看到以上信息说明GCC已经在ubuntu中安装成功;

方法 2:安装完整开发工具包(推荐)

如果需要同时安装 g++make 和其他开发工具,可以安装 build-essential

sudo apt update sudo apt install build-essential

安装完成后,检查 gcc 和 g++ 版本:

gcc --version g++ --version


安装特定版本的 GCC

如果需要特定版本的 GCC(例如 GCC 11):

  1. 搜索可用版本:

    apt list gcc-*

  2. 安装指定版本(例如 gcc-11):

    sudo apt install gcc-11

  3. 设置默认版本(可选):

    sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 11

通过SSH登录Linux常见软件:

Finalshell

官方地址:FinalShell

软件下载地址:FinalShell SSH工具,服务器管理,远程桌面加速软件,支持Windows,macOS,Linux,版本4.5.12,更新日期2024.10.30 - FinalShell官网

MobaXterm

官方地址:MobaXterm free Xserver and tabbed SSH client for Windows

软件下载地址:MobaXterm Xserver with SSH, telnet, RDP, VNC and X11 - Download

Visual Studio Code

官方地址:Visual Studio Code - Code Editing. Redefined

可以使用VS Code中的remote SSH组件访问安装在虚拟机中的Ubuntu;

gcc 相关命令

gcc对于文件后缀命名是很敏感的;(.c - C语言,.cpp -C++语言)

gcc -o

示例:

gcc -o build test.c

会生成一个 build文件

./build 则会执行编译后的程序;

gcc -v -o build test.c

执行上面的命令可以看到gcc工具的编译过程;使用gcc相关命令实现gcc -o build test.c能力;

step1:将test.c文件编译生成一个汇编文件

gcc -S -o a.s test.c

生成一个a.s的文件(.s文件是汇编文件)

cat a.s(查看汇编文件内容)

.file   "test.c"
        .text
        .section        .rodata
.LC0:
        .string "hello word"
        .text
        .globl  main
        .type   main, @function
main:
.LFB0:
        .cfi_startproc
        endbr64
        pushq   %rbp
        .cfi_def_cfa_offset 16
        .cfi_offset 6, -16
        movq    %rsp, %rbp
        .cfi_def_cfa_register 6
        leaq    .LC0(%rip), %rdi
        call    puts@PLT
        movl    $0, %eax
        popq    %rbp
        .cfi_def_cfa 7, 8
        ret
        .cfi_endproc
.LFE0:
        .size   main, .-main
        .ident  "GCC: (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0"
        .section        .note.GNU-stack,"",@progbits
        .section        .note.gnu.property,"a"
        .align 8
        .long    1f - 0f
        .long    4f - 1f
        .long    5
0:
        .string  "GNU"
1:
        .align 8
        .long    0xc0000002
        .long    3f - 2f
2:
        .long    0x3
3:
        .align 8
4:

step2:将.s文件生成.o文件

gcc -c -o a.o a.s

a.s是上一步生成的文件;在Linux终端输入ls 就可以看到

a.o  a.s  build  test.c
.o文件是二进制文件;

程序编译基本包含一下几部分:预编译、编译、汇编、链接;

预编译处理的是以#开头的相关命令;

gcc -D:通过GCC编译增加的宏定义,在程序代码中搜索不到;

gcc -Dabc -o build test.c

C语言补充说明:

#include(包含头文件)

#define OUTPUT_STRING(x)    #x       //宏定义的中的#x代表输出的是字符串;

#define MOUNTH(x)   inputMounth##x  //输出相同“inputMounth”变量取值-可以用于变量和函数;

示例代码如下:

#define OUTPUT_STRING(x)    #x 

#define MOUNTH(x)   inputMounth##x

int main()

{

    int inputMounth1 = 31;

    int inputMounth2 = 29;

#ifdef abc

    printf("run the %s,%s,%d\n",__FUNCTION__,__FILE__,__LINE__);

#endif

    printf("the define %s\n",OUTPUT_STRING(123456));

    printf("the January have %d days\n",MOUNTH(1));

    printf("the February‌ have %d days\n",MOUNTH(2));

    return 0;

}

输出结果:

the define 123456
the January have 31 days
the February‌ have 29 days
 

宏定义

#define(宏定义/宏函数 - 宏名、宏体)

条件预处理

#if、#ifdef、#elif、#else、#endif、

预定义宏

_FUNCTION_:函数名

_LINE_:行号

_FILE_:文件

 printf("run the %s,%s,%d\n",__FUNCTION__,__FILE__,__LINE__); 可以使用这个功能在调试过程中定位问题的原因;

对于#include <stdio>  和#include "ota.h"

<>一般表示的系统的标准库的头文件或者系统库头文件;

""自有的头文件,当前文件夹下的头文件;


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值