zoukankan      html  css  js  c++  java
  • 0基础学习ios开发笔记第一天

    Ios操作

    界面操作

    快捷键

    command + c 复制

    command+v 粘贴

    command +a 全选

    command +s 保存

    command +z 撤销

    command +x  剪切

    command +space  输入法的切换

    command +<—(退格键)   删除光标所在行,光标前的所有内容

    option键(ios)--alt(windows)键

    command在Windows键盘中就是windows键

    Linux命令

    cd

    cd:change directory 切换目录

    liuzw@ubuntu:~/sunjie$ cd c
    liuzw@ubuntu:~/sunjie/c$ 

    cd  ~ 或者直接输入cd,是切换到当前用户的主目录

    liuzw@ubuntu:~/sunjie/c$ cd 
    liuzw@ubuntu:~$

    cd  -  撤销上一次的cd操作

    liuzw@ubuntu:~/sunjie$ cd c
    liuzw@ubuntu:~/sunjie/c$ cd 
    liuzw@ubuntu:~$ cd -
    /home/liuzw/sunjie/c
    liuzw@ubuntu:~/sunjie/c$ 

    cd / 回到根目录

    cd .. 回到父目录

    liuzw@ubuntu:~/sunjie/c$ cd ..
    liuzw@ubuntu:~/sunjie$ 

    pwd:print workdirectory查看当前工作路径

    liuzw@ubuntu:~/sunjie$ pwd
    /home/liuzw/sunjie

    ls: list source 查看当前工作路径下的资源,包括文件及目录

    ls –a(all) 查看所有资源,包括隐藏的

    ls –l(list one file per line)

    红色圈住的第一列表示资源类型,其中的d表示目录,-表示文件

    红色圈住的第二列表示占用磁盘空间大小

    mkdir : make directory 创建目录

    mkdir –p 当父目录不存在时,就创建父目录,而不是报错

    touch 一般用来创建空文件

    echo 回显数据 输出变量

    $? 表示上一次命令的执行结果,0表示执行正确,其他的表示错误,如上图示

    cp :copy

    拷贝文件

    拷贝目录

    cat 显示文件内容,只能看文件,不能看目录

    cat –n 显示时加行号

    C语言

     

    计算机只认识1和0,编程语言的层级如下:

    机器语言

    汇编语言

    高级语言(c语言)

    1001,0010,0010,1111

    mov  2 f

    while   if  int

    C语言的编译过程

    编译:实质就是翻译。常用的编译器如:gcc

    可执行文件是运行时环境和一些.o结尾的文件的集合。将我自己目标文件和这些文件链接以后,形成可执行的文件。

    目标文件是二进制机器码文件,可执行文件也是二进制的机器码文件,但是目标文件不能在机器上运行,必须与运行环境等链接才可运行。而可执行文件可以在机器上运行。

    编写我的第一个c程序,hello.c他hello.h

    hello.h文件内容如下:

    #define HELLO "helloworld"

    Hello.c文件内容如下

    #include <stdio.h>
    #include "hello.h"
    int main(void)
    {
        printf(HELLO);
        return 0;
    }

    整个编译阶段分为四步:

    第一步:预处理,hello.c转变为hello.i,一般为隐式执行

    预处理命令:gcc -E hello.c -o hello.i,生成预处理文件简略如下:

    extern void flockfile (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__));

    extern int ftrylockfile (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ;

    extern void funlockfile (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__));

    # 943 "/usr/include/stdio.h" 3 4

    # 2 "hello.c" 2

    # 1 "hello.h" 1

    # 3 "hello.c" 2

    int main(void)

    {

        printf("helloworld");

        return 0;

    }

    在预处理阶段,宏HELLO被替换为实际内容

    第二步:汇编阶段,将C语言文件转换为汇编语言文件,也就是hello.i转变为hello.s

    命令:gcc -S hello.i -o hello.s

    hello.s文件内容如下

        .file   "hello.c"
    
        .section   .rodata
    
    .LC0:
    
        .string "helloworld"
    
        .text
    
        .globl  main
    
        .type   main, @function
    
    main:
    
    .LFB0:
    
        .cfi_startproc
    
        pushq   %rbp
    
        .cfi_def_cfa_offset 16
    
        .cfi_offset 6, -16
    
        movq    %rsp, %rbp
    
        .cfi_def_cfa_register 6
    
        movl    $.LC0, %edi
    
        movl    $0, %eax
    
        call    printf
    
        movl    $0, %eax
    
        popq    %rbp
    
        .cfi_def_cfa 7, 8
    
        ret
    
        .cfi_endproc
    
    .LFE0:
    
        .size   main, .-main
    
        .ident  "GCC: (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4"
    
        .section   .note.GNU-stack,"",@progbits

    第三步:将汇编语言编译成对应的机器语言(二进制格式),也就是hello.s转换为hello.o

    命令:

    gcc -c hello.s -o hello.o

    使用命令

    objdump -d hello.o

    反汇编hello.o文件内容如下:

    hello.o:     file format elf64-x86-64

    Disassembly of section .text:

    0000000000000000 <main>:

       0: 55                   push   %rbp

       1: 48 89 e5                mov    %rsp,%rbp

       4: bf 00 00 00 00         mov    $0x0,%edi

       9: b8 00 00 00 00         mov    $0x0,%eax

       e: e8 00 00 00 00         callq  13 <main+0x13>

      13: b8 00 00 00 00         mov    $0x0,%eax

      18: 5d                   pop    %rbp

      19: c3                   retq

    第四步:将hello.o文件与运行环境链接,形成可执行文件

    命令:

    gcc hello.o -o hello

    查看hello文件内容,命令objdump –d hello反汇编查看

    000000000040052d <main>:

      40052d: 55                     push   %rbp

      40052e: 48 89 e5               mov    %rsp,%rbp

      400531: bf d4 05 40 00         mov    $0x4005d4,%edi

      400536: b8 00 00 00 00         mov    $0x0,%eax

      40053b: e8 d0 fe ff ff         callq  400410 <printf@plt>

      400540: b8 00 00 00 00         mov    $0x0,%eax

      400545: 5d                     pop    %rbp

      400546: c3                     retq  

      400547: 66 0f 1f 84 00 00 00   nopw   0x0(%rax,%rax,1)

      40054e: 00 00

    以上为链接后的main函数,注意与未链接的区别:

    0000000000000000 <main>:

       0:     55                   push   %rbp

       1:     48 89 e5                  mov    %rsp,%rbp

       4:     bf 00 00 00 00           mov    $0x0,%edi

       9:     b8 00 00 00 00           mov    $0x0,%eax

       e:     e8 00 00 00 00           callq  13 <main+0x13>

      13:     b8 00 00 00 00           mov    $0x0,%eax

      18:     5d                   pop    %rbp

      19:     c3                   retq

    执行文件,命令./hello

    如果把hello.c程序中的return 0 去掉的话,返回值就不一定为0

    liuzw@ubuntu:~/sunjie/c$ ./a.out

    helloworldliuzw@ubuntu:~/sunjie/c$ echo $?

    10

    总结:以上所有具体的编译过程可直接执行如下命令,直接形成可执行文件a.out

    ,也可加-o hello

  • 相关阅读:
    (转)读《从0到1》
    做事需要愿景,产品都是人思想的投射
    sed 替换有单引号的行
    删除iptables nat 规则
    解决yum安装 openssl-devel时产生的Multilib version problems found错误(转)
    docker 私有仓库 harbor docker-compose
    kubernetes 比较好的案例-创建tomcat-mysql集群 mysql.yaml + workpress.yaml
    配虚拟ip脚本
    kubenetes 1.9 学习 pod
    解决sql和beans中名字不一致问题
  • 原文地址:https://www.cnblogs.com/turing-apple/p/4909853.html
Copyright © 2011-2022 走看看