linux嵌入式学习笔记(一)(Ubuntu下使用gcc和vscode作为开发环境)

-------------🤔️gcc编译命令及文件查看命令---------------------------------------------------------------------

应用名 -v    //查看应用安装信息,如gcc -v
gcc -o输出的文件名(编译文件的名称)  输入文件名(要被编译文件的名称)或者gcc 输入文件名(要被编译文件的名称) -o 输出的文件名(编译文件的名称)    //注意文件后缀名 
cp 001.c 002.cpp    //将001.c内容 copy到002.cpp(在同一目录下新建002.c) 
./编译文件的文件名    //显示编译文件的内容
vi + .c/.i/.s/.o文件名    //显示.c/.i/.s/.o文件内容
gcc -v -o         //打印翻译官信息
gcc -I 跟查找头文件的目录 -o  //帮助查找头文件
gcc -D               //在预处理前增加一次define    如gcc -DABC (-o) ===在-o(编译)之前进行#define ABC
def和include不是关键字,是预处理命令
gcc -E -o        //🚩️预处理(替换,处理了def include这些东西),将.c文件处理为.i文件(cpp工作 cpp -o a.i 001.c)
gcc -S -o        //🚩️编译(处理的是关键字及运算符),将.c转换成.s文件输出(CC1工作  CC1 -o a.s 001.c)
gcc -c -o        //🚩️汇编 生成原材料(这一步也可完成上一步功能),将.c/.s文件转换成.o文件输出(as工作   as -o a.o a.s)
gcc -o                 // 🚩️链接(这一步也可完成上两步功能)(collect2工作  collect2 -o build a.o+...)

--------------🤔️c语言中常见错误--------------------------------------------------------------------------------
一:预处理错误
 #include<...>和include"..."的区别:<...>是在系统目录寻找...,而"..."是在当前目录寻找...
 No such file or directory (not find)----未区分#include <name>/#include "name",编译器找不到头文件。gcc -i 跟头文件位置可以帮助寻找头文件
二:编译错误
 语法、符号等有问题
三:链接错误(原材料不够(undefine)或多了(multiple definition比如多次定义了某函数))
 有多个.c文件时可以先分别gcc -c 汇编生成相应原材料,最后gcc -o链接这些原材料
 寻找标签是否实现,未实现就在连接中加入相应原材料;如果多次实现了标签保留一个就好
 
 --------------🤔️c语言预处理-------------------------------------------------------------------------------------
 一.预处理的使用
  #include   包含头文件
  #define    宏 (替换)
      #define  宏名    宏体            //宏名宏体之间至少一个空格,这里不进行语法检测,一般习惯加宏体及宏函数中变量外加括号防止出现一些优先级错误
      #define  宏名(x)    含x的宏体        //宏函数。如 #define  A(x)    (5+(x)) ,A(1)即可代替6
  
  #ifdef #else #endif
  
  预定义宏(gcc或编译器已经定义好的) 注意下划线*2!!!
  __FUNCTION__      :函数名
  __LINE__       :行号
  __FILE__      : 文件名
  
  这些定义宏可以帮助调试,确定相关代码运行位置
  
  宏展开下的#、##
  一.#    字符串化    //可以用于为字符串赋值
     例如将ab赋值给ABC:    
      #include <stdio.h>

    #define ABC(x)      #x

    int main()
    {
        printf(ABC(ab\n));
        return 0;
    }
    输出: ab
  二.##    连接符号
     例如连接myday和变量x
      #include <stdio.h>

    #define DAY(x)      myday##x

    int main()
    {
        int myday1 = 10;
        int myday2 = 20;
        printf("the day is %d\n",DAY(1));
    }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值