1.
在ANSI C的任何一种实现中,存在两个不同的环境。
第1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令。
第2种是执行环境,它用于实际执行代码。

翻译环境

这里写图片描述
每个源文件进行单独编译,形成一个目标文件。

2.
linux部分命令

ls //列出目录

ls -s //打印文件大小
ls -R //将目录所有的子目录的文件列出,相当于递归
ls -a //显示出所有文件
ls -l //显示出每一个文件的详细信息(时间,名称,文件权限,链接等)
ls -lt //在目录中列出文件并对最后修改日期和时间进行排排序
ls -ltr // 基于时间和日期进行逆向排序文件
mkdir // 创建文件夹
cd //改变目录
touch //创建空文件
ifconfig //查ip地址
pwd //打印当前目录
rm - r //递归删除
rm - f //删除文件名
vim //编辑器
rm-f * //删除所有
3.linux环境下写代码
vim test.c //打开vim
i //插入
esc //保存
shift :wq //写并退出
gcc test.c //编译
./a.out //当前目录下的a.out

补充vim三种模式:普通模式,插入模式,命令行模式

源文件执行整个过程:
这里写图片描述

预处理阶段:

这里写图片描述
编译阶段:
这里写图片描述
汇编阶段:

这里写图片描述

运行环境

程序执行的过程:

1 . 程序必须载入内存中。在有操作系统的环境中:一般这个由操作系统完成。在独立
的环境中,程序的载入必须由手工安排,也可能是通过可执行代码置入只读内存来
完成。
2 . 程序的执行便开始。接着便调用main函数。
3 . 开始执行程序代码。这个时候程序将使用一个运行时堆栈(stack),存储函数的
局部变量和返回地址。程序同时也可以使用静态(static)内存,存储于静态内存
中的变量在程序的整个执行过程一直保留他们的值。
4 . 终止程序。正常终止main函数;也有可能是意外终止。

预处理

预定义符号
_FILE_ //进行编译的源文件
_LINE_ //文件当前的行号
_DATE_ //文件被编译的日期
_TIME_ //文件被编译的时间
_STDC_ //如果编译器遵循ANSI C,其值为1,否则未定义

例子:
#include <stdio.h>
int main()
{
    printf("file:%s\n", __FILE__); 
    printf("line:%d\n",__LINE__);
    printf("date:%s\n",__DATE__); 

    return 0;
}

这里写图片描述

#define

宏定义的便利之处:

#include <stdio.h>
#define CLEARBUF {\
               int tmp = 0;\
               while((tmp=getchar())!='\n' && (tmp!=EOF))\
              {\
                  ;\
                     }\
                  }

int main()
{
    char arr[10];
    int ch = 0;
    CLEARBUF  //清空缓冲区
    ch = getchar();
    printf("hello:%c\n",ch);
    return 0;
}

#define定义的部分可换做fflush(stdin)//清空缓冲区

补充:1.#define 宏定义时换行要加’ \’,否则报错,很难找到错哦!
2.#define 定义时尽量不要加分号,有可能·会出错。

#define MAX 1000;
int main()
{
   int a = MAX;
   int b = 20;
   int c = a+b;
   printf("c=%d\n",c);
   return 0;
}
编译出错,多加了一个分号

好了,今天就写这么多喽!哈哈,如有不足,请多多指教哦!!

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐