zoukankan      html  css  js  c++  java
  • C语言的执行

    在ANSIC 的任何一种实现中,有两种不同的环境

      翻译环境:将源代码转换为可执行的机器代码

      执行环境:用于执行代码

    这两种环境可以运行于同一个机器上,也可以运行于不同的机器上

    例如交叉编译器:在一台机器上运行,产生的可执行代码可以再另一台机器上运行,操作系统也是如此

    ----------------------------------》翻译

    各个源文件通过编译生成目标文件,链接器通过将目标文件捆绑在一起,同事也可能引入c函数库中的文件,生成可执行文件

    目标代码属于机器指令的初步形式,如果我们在编译程序的命令行中加入优化的选项,优化器就会对目标代码进行进一步的优化,从而产生更高的效率。但是优化需要额外的时间,所以我们需要根据不同的情况决定我们是否需要进行优化选项

    ------------------------------------》编译和链接

    在unix系统中,c编译器被称为cc

    1:编译并链接一个c源文件

    cc pro.c

    这条命令会产生一个a.out的可执行文件,中途会产生一个pro.o的目标文件,但是在链接结束后被自动删除

    2:编译并链接几个c源文件

    cc 所有源文件(中间用空格隔开)

    这种方法产生的多个目标文件不会被自动删除,链接过后,用户可以再对报错的文件进行修改,之后仅对改过的源文件进行编译链接就可以了

    3:编译一个源文件,并和现存的目标文件一起链接

     cc 所有源文件&&所有目标文件

    4:编译单个文件,并产生目标文件,之后在进行链接

    cc -c pro.c

    编译多个产生同样效果也是同上

    5:链接多个目标文件

    cc  所有文件.o

    上面的命令都可以加上-o name中,这样产生的可执行文件就会保存在name中,而不是a.out中

    MS-DOS与UNIX有以下几点不同

    1:目标文件的名为.obj

    2:他的命令为bcc

    3:当单个源文件被编译链接的时候,不会删除目标文件

    -------------------------------------------------------------》执行

    程序的执行也分为多个阶段,首先程序会被载入到内存当中,这个任务由操作系统来完成

    然后在宿主环境中,通常一个小的启动程序和程序连接在一起,他负责一系列日常的任务,如收集命令行参数以便程序能够访问到他们,接着,便开始调用mian函数

    在运行的过程中,程序将使用一个堆栈,用于存储在运行的过程中的局部变量和返回地址,,同时程序也会使用静态内存,用于存储静态变量,以便在程序运行的过程中不会改变,并且一直保留到最后

    -----------------------------------------------------》词法规则

    三字母词:标准还定义了三字母词,三字母词就是几个字符的序列,合起来表示另一个字符

    1.??(    [          2.??<    {        3.??=     #         4. ??)        ]        5.??>      }        6.??/                

    7.??! |          8.??`     ^

    ??-   ~

    ---------------------------------------------------》注释

    所有的注释都会被预处理器拿掉,取而代之的是一个空格,因此,注释可以出现在人一个空格可以出现的地方,

    但是注意注释不可以嵌套注释

    程序必须被载入到内存中才可以运行,在宿主环境中,这个任务由操作系统来完成,在自由式环境中,程序常常存于ROM中,经过初始化的静态变量在1程序执行前能获得他们的值

    //想知道输出,运行一下就知道

    #include <stdio.h> main(t,_,a) char *a; {return!0<t?t<3?main(-79,-13,a+main(-87,1-_, main(-86, 0, a+1 )+a)):1,t<_?main(t+1, _, a ):3,main ( -94, -27+t, a )&&t == 2 ?_<13 ?main ( 2, _+1, "%s %d %d " ):9:16:t<0?t<-72?main(_, t,"@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l,+,/n{n+ ,/+#n+,/#;#q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'K:'+}e#';dq#'l q#'+d'K#!/ +k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw' i;# ){n l]!/n{n#'; r{#w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w#q# n'wk nw' iwk{KK{nl]!/w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c ;;{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+; #'rdq#w! nr'/ ') }+}{rl#'{n' ')# }'+}##(!!/") :t<-50?_==*a ?putchar(a[31]):main(-65,_,a+1):main((*a == '/')+t,_,a +1 ):0<t?main ( 2, 2 , "%s"):*a=='/'||main(0,main(-61,*a, "!ek;dc i@bK'(q)-[w]*%n+r3#l,{}: uwloca-O;m .vpbks,fxntdCeghiry"),a+1);}
  • 相关阅读:
    封装格式---FLV---文件格式解析
    高并发服务器---基础----IO模式和IO多路复用
    nginx---如何实现轻量级和高并发
    nginx---基础介绍
    H.264---SPS和PPS
    机器学习---算法---朴素贝叶斯
    机器学习---算法---Adaboost
    流媒体传输协议---STUN---基础
    H.264---指数哥伦布编码
    【linux】vim编辑器快捷键使用方法
  • 原文地址:https://www.cnblogs.com/13224ACMer/p/5581618.html
Copyright © 2011-2022 走看看