学习程序环境和预处理

本文详细介绍了程序环境、编译流程(预编译、编译、汇编)、预定义符号如__FILE__等的作用,以及#define宏的使用、宏与函数的区别,以及文件包含的规则。作者通过实例展示了这些概念,并强调了命名约定和条件编译的重要性。
摘要由CSDN通过智能技术生成


前言

这里写一下有关程序环境和预处理的内容

一、程序环境

  • 翻译环境:在这个环境中源代码被转换为可执行的机器指令。
  • 执行环境:它用于实际执行代码

二、编译

1.预编译

  • 1.注释的删除
  • 2.#include 头文件的包含
  • 3…#define 符号的替换
  • 4.所有的预处理指令都是在预处理阶段进行处理

2.编译

  • 1.把c语言代码翻译成了汇编指令
  • 2.语法分析
  • 3.语义分析
  • 4.词法分析
  • 5.符号汇总

3.汇编

  • 把汇编代码翻译成二进制的指令
  • 形成符号表

三、预定义符号

  • __FILE__      //进行编译的源文件
    
  • __LINE__     //文件当前的行号
    
  • __DATE__    //文件被编译的日期
    
  • __TIME__    //文件被编译的时间
    
  • __STDC__    //如果编译器遵循ANSI C,其值为1,否则未定义
    
    • 作用代码演示:
#include <stdio.h>

int main()
{
	//都是预编译阶段处理的预定义符号
	printf("%s\n", __FILE__);//文件名
	printf("%d\n", __LINE__);//这个代码在第几行
	printf("%s\n", __DATE__);//日期
	printf("%s\n", __TIME__);//时间
	//printf("%s\n", __STDC__);//VS不支持ANSIC



	return 0;
}

在这里插入图片描述


四、#define

#define 定义标识符

#include <stdio.h>

#define W 7
#define Y "ABC"
#define Z for(;;)

int main()
{
	printf("%d\n", W);
	printf("%d\n", Y);
	//Z
	//{
	//	printf("hehe\n");
	//}
	return 0;
}

#define 宏定义

#include <stdio.h>

//#define 定义宏  不能递归

#define  SQUARE(X) X*X
//#define  SQUARE(X) ((X)*(X)) 尽量写成这样   

int main()
{
	int a = 3;
	int r = SQUARE(a);
	int r = SQUARE(a+2);
	printf("r=%d\n", r);
	return 0;
}

在这里插入图片描述


#和##

宏和函数对比

  • 宏不方便调试
  • 宏不够严谨
  • 一般简单的算法用宏定义
  • 需要重复多次且内容大则用函数

命名约定

  • 宏名全部大写
  • 函数名 不要全部大写

#undef

在这里插入图片描述


条件编译

在这里插入图片描述
在这里插入图片描述


文件包含

  • #include “xxx.h”
  • 先在xxx.c文件的当前文件目录下找xxx.h,找不到再去库目录里面找,
  • 在找不到就报错
  • #include <xxx.h>
  • 直接去不标准库目录去找
  • 找不到就报错
  • 提示:这里对文章进行总结:
  • 防止头文件重复多次包含(引用)

  • #if xxx_h

  • #define xxx_h

  • int Add(int x, int y)

  • #endif


  • #pragma once
  • int Add(int x, int y)

总结

  • 真没啥好说的
  • 目前学的还有限只理解这些
  • 写一篇博客强化记忆一下
  • 26
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值