• linux c 笔记-1


    指令帮助:

    man xxx_command

    man 2 xxx_command

    man 3 xxx_command

    eg. 打开文件的函数open, 如果不清楚传参,则

    man open 

    man 2  xxx_command 通常在man下面如果出来的不是你想要的,试试man 2:

    eg. 写内容到文件函数write

    man 2 write

    ps:man后面跟数字的含义:

    1、Standard commands (标准命令)
    2、System calls (系统调用)
    3、Library functions (库函数)
    4、Special devices (设备说明)
    5、File formats (文件格式)
    6、Games and toys (游戏和娱乐)
    7、Miscellaneous (杂项)
    8、Administrative Commands (管理员命令)
    9 其他(Linux特定的), 用来存放内核例行程序的文档。

    编译&链接:

    gcc  -o 可执行文件  源文件.c(或依赖文件)

     只编译(得到obj/o文件),不链接

    gcc -c 源文件.c

    调试支持

    gcc -g -o 可执行文件 依赖文件

    配合 gdb 可执行文件 就可以调试了。

    (ps, 如果调试的时候,命令要跟参数, 参考这里

      即:先 gdb 指令 进入调试, 然后 run 具体参数

    调优:

    gcc -O -o 目标文件 依赖文件

    -O相关的man帮助文档如下:

           The compiler performs optimization based on the knowledge it has of the program.  Compiling multiple files at once to a single output file mode
           allows the compiler to use information gained from all of the files when compiling each of them.
    
           Not all optimizations are controlled directly by a flag.  Only optimizations that have a flag are listed.
    
           -O
           -O1 Optimize.  Optimizing compilation takes somewhat more time, and a lot more memory for a large function.
    
               With -O, the compiler tries to reduce code size and execution time, without performing any optimizations that take a great deal of compilation
               time.
    
               -O turns on the following optimization flags:
    
               -fauto-inc-dec -fcprop-registers -fdce -fdefer-pop -fdelayed-branch -fdse -fguess-branch-probability -fif-conversion2 -fif-conversion
               -finline-small-functions -fipa-pure-const -fipa-reference -fmerge-constants -fsplit-wide-types -ftree-builtin-call-dce -ftree-ccp -ftree-ch
               -ftree-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse -ftree-fre -ftree-sra -ftree-ter -funit-at-a-time
    
               -O also turns on -fomit-frame-pointer on machines where doing so does not interfere with debugging.
    
           -O2 Optimize even more.  GCC performs nearly all supported optimizations that do not involve a space-speed tradeoff.  As compared to -O, this
               option increases both compilation time and the performance of the generated code.
    
               -O2 turns on all optimization flags specified by -O.  It also turns on the following optimization flags: -fthread-jumps -falign-functions
               -falign-jumps -falign-loops  -falign-labels -fcaller-saves -fcrossjumping -fcse-follow-jumps  -fcse-skip-blocks -fdelete-null-pointer-checks
               -fexpensive-optimizations -fgcse  -fgcse-lm -findirect-inlining -foptimize-sibling-calls -fpeephole2 -fregmove -freorder-blocks
               -freorder-functions -frerun-cse-after-loop -fsched-interblock  -fsched-spec -fschedule-insns  -fschedule-insns2 -fstrict-aliasing
               -fstrict-overflow -ftree-switch-conversion -ftree-pre -ftree-vrp
    
               Please note the warning under -fgcse about invoking -O2 on programs that use computed gotos.
    
           -O3 Optimize yet more.  -O3 turns on all optimizations specified by -O2 and also turns on the -finline-functions, -funswitch-loops,
               -fpredictive-commoning, -fgcse-after-reload, -ftree-vectorize and -fipa-cp-clone options.
    
           -O0 Reduce compilation time and make debugging produce the expected results.  This is the default.
    
           -Os Optimize for size.  -Os enables all -O2 optimizations that do not typically increase code size.  It also performs further optimizations
               designed to reduce code size.
    
               -Os disables the following optimization flags: -falign-functions  -falign-jumps  -falign-loops -falign-labels  -freorder-blocks
               -freorder-blocks-and-partition -fprefetch-loop-arrays  -ftree-vect-loop-version
    
               If you use multiple -O options, with or without level numbers, the last such option is the one that is effective.

    If you use multiple -O options, with or without level numbers, the last such option is the one that is effective.

    Makefile/makefile

    一个大工程,有很多文件要编译链接时用到,配合make指令使用。

    Makefile编写规则:

    目标文件:依赖文件
        规则/指令

    Makefile的解析方式类似递归算法(暂未看其源码):

      1. 第一行的目标文件即为最终文件

      2. 查看其依赖文件是否存在,存在且为最新的则生成最终文件。结束。否则,跳至3

      3. 查看其(以上的依赖文件的)依赖文件的生成规则是否存在, 不存在报错。存在,则重复以上步骤2,直至生成最终目标文件。

    awesome-c

    如果想看看c有哪些优秀的开源库,或者想用项目上手,看这里:

    https://notabug.org/koz.ross/awesome-c

    (不完全译本:https://github.com/jobbole/awesome-c-cn)

    其他

    http://c.biancheng.net/cpp/u/yuanma/list_62_1.html 

  • 相关阅读:
    struts2乱码
    修改maven的war包生成路径
    cookie的坑
    linux jps 命令
    (转)如何使VMware ip与本机ip处于同一网段
    springboot + swagger2 学习笔记
    can not find java.util.map java.lang.Double问题
    为什么不写 @RequestParam 也能拿到参数?
    乱码问题
    PostMan的使用注意事项
  • 原文地址:https://www.cnblogs.com/Tommy-Yu/p/5817202.html
Copyright © 2020-2023  润新知