c语言程序环境和预处理

test.c  编译环境->   test.exe    ->执行/运行环境

编译环境:

编译成test.obj与链接库通过 链接器 生成可执行程序...    编译(预处理,编译,汇编)和链接
     预处理阶段 ->进行文本操作:    1.完成了头文件包含  2.#define定义的符号和宏的替换  3.注释删除
     编译阶段  -> 把代码转化成汇编代码:1.语法分析  2.词法分析  3.语义分析   4.符号汇总
     汇编阶段 ->  把汇编代码转化成机器指令(二进制指令 ):1.生成符号表 test.o为elf格式
     链接阶段 ->  把多个目标文件和链接库进行链接 :1.合并段表 2.符号表的合并和重定位

运行环境:

- 过程:1.载入内存,有操作系统由操作系统完成。独立环境中,由手工安排。   
                        2.程序开始执行,调用main函数   
                        3.执行代码,使用一个运行时的堆栈stack,存储局部变量和返回值。同时程序也可使用静态内存,在执行过程中一直保留值  
                        4.终止程序。正常终止main函数,可能意外终止

预定义符号:

__FILE__  __LINE__  __DATE__  __TIME__  
运行文件的地址,行数,运行日期,运行时间:  __STDC__如果编译器遵循ANSI C,其值为1,否则未定义

 

条件编译:

1.#if 常量表达式。。。#endif   常量表达式值为0其中不进行编译

#if 0
int main()
{
    printf("%d", 2);
    return 0;
}
#endif

2.多分支条件编译#if 常量表达式。。。#elif(*n)常量表达式。。。#else。。#endif如果第一个表达式值为真,不继续执行后面语句。

#define M 20
int main()
{
#if M>30
    printf("M>30\n");
#elif M>40
    printf("M>40\n");
#else
    printf("haha\n");
#endif
    return 0;
}

3.判断是否定义,#ifdef name...#endif

如果name定义,中间参与编译    另一种写法#if (!)defined(TEST)...#endif

#define A 10
int main()
{
#ifdef A
    printf("%d\n", A);

#endif
#if !defined(A)
    printf("%d", 90);
#endif
    return 0;

}

4.嵌套调用

#if defined(OS_UNIX)
#ifdef option1
   unix_version_option1();
#endif

#ifdef option2
    unix_version_option2();
 #endif
    ....
 
 #elif defined(OS_MSDOS)
   #ifdef option1
     msdos_version_option1();
 #endif
#endif

头文件:

库文件包含:

C语言库中提供的函数头文件用<>   #include<stdio.h>


本地文件包含:

自定义函数用""    #include "add.h"

区别:

"" 自己代码所在的目录下查找,如果第1不找不到,则在库函数的头文件目录下查找

<>直接去库函数头文件所在的目录下查找

防止文件多次调用:

1.#pragam once
2.#ifndef __ADD_H__\n#define__ADD_H__....#endif(大小写无所谓)

其余预指令:

#error  #pragma   #line  ...自己了解    #pragam pack(n)编译选项,结构体,表示n字节对对齐

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言中,预处理是指在编译阶段之前对源代码进行处理的过程,它由编译器的预处理器执行。预处理器会根据以符号#开头的预处理命令,对源代码进行一系列的处理和替换操作。预处理命令可以用来包含头文件、定义宏、条件编译等。 其中,预处理命令#include用于包含其他文件。被包含的文件可以是普通的C语言程序文件(.c文件),也可以是C语言程序的头文件(.h文件)。在C语言系统中,大量的定义与声明是以头文件形式提供的。通过#include命令,我们可以将头文件中的内容插入到当前源文件中,以便在程序中使用头文件中定义的函数、变量或宏等。 总结起来,预处理C语言中的用法主要包括使用#include命令来包含头文件,以及其他预处理命令用于定义宏、进行条件编译等操作。这些预处理命令能够扩展C语言程序设计的环境,提供了更灵活和高效的代码编写方式。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [C语言中的预处理详解](https://blog.csdn.net/weixin_32445333/article/details/117124370)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值