宏与C预处理器

2018 / 10

图片来源于网络

C语言入门到精通

公众号

闫小林

通常的目标是:书写一个像包含一个单独的函数调用语句的宏, 这意味着:调用者需要提供最终的分号,而宏体则不需要。因此宏体不能为简单的括弧包围的复合语句,因为如果这样,调用的时候就会发生语法错(明显是一个单独语句,但却多了一个分号)。

1

宏定义

#define TRUE 1

#define PI 3.14

#define MYNAME "Damon"

宏可以定义 整型 ,浮点型,字符型,字符串类型

2

_FILE_预处理常量

#include<stdio.h>

void main(void)

{

printf("Hello World!",_FILE_); //_FILE_就是文件名字

}

3

改变预处理器的行数

在C语言中提供了#line的预处理,准许用户改变当前行数,下面预处理器将行数定位于100行

#line 100

#line 1 "FILENAME.C"

chag_line.c说明了#line的用法

C语言入门到精通

4

参数个数可变的宏的书写

一般用一个单独的用括弧括起来的”参数“定义和调用宏,参数在宏扩展的时候成为类似printf()那样的函数的整个参数列表。

5

sizeof不能用于#if预编译器指令中,因为此时还未对类型名称作解析

m4工具是用于多用途的预处理器

比较宏与函数如果比较注重效率和速度,就用宏,如果比较在乎程序大小就用函数。

预定义的值和宏都在include的目录下

END

本文分享自微信公众号 - C语言入门到精通(yclzl960229)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-10-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Rust语言学习交流

从Rust到远方:WebAssembly 星系

来源:https://mnt.io/2018/08/22/from-rust-to-beyond-the-webassembly-galaxy/

17820
来自专栏程序员周同学

【数据结构】单链表的增删改查

单链表需要使用的函数指针操作小技巧计算单链表的长度创建单链表单链表插入数据单链表删除数据效率分析

34620
来自专栏程序员成长指北

优雅简洁的异步Asnyc/Await

async函数中,如果有多个await关键字时,如果有一个await的状态变成了rejected,那么后面的操作都不会继续执行,promise也是同理有这样一个...

11320
来自专栏编程珠玑

C++类初识-有了对象之后

无论是在Java还是Python中,都有类的概念,类的基本思想是数据抽象和封装,一个类定义了一种数据类型以及相关的操作。C++中类是怎样的呢?本文将结合C语言,...

7310
来自专栏程序员成长指北

JS中的for循环——你可能不知道的点。

for循环中出现多个异步函数(比如ajax请求,或者node后端执行一些数据库操作或文件操作),如果想要这些异步串行变为同步应该怎么做?

10720
来自专栏生信了

Python(一)让你的代码更加pythonic

pythonic就是让你的代码更加具有python特色,通常是利用python独有的一些语法实现的。pythonic的代码往往更加简洁、优美和高效,不信你接着往...

4720
来自专栏诸葛青云的专栏

C语言常用的编译器

这款软件相信大家看到名字就觉得很亲切的,也是大家吐槽最多的。中国大学的计算机专业学习C语言的必备神器,也算是比较古老的C语言学习工具了。现在的大学计算机二级等级...

62250
来自专栏编程之路的专栏

程序员C语言快速上手——高级篇(十一)

线性表是最为常用的数据结构之一,其他高级语言也都有提供,也就是Java、Python中的List

31130
来自专栏iOS开发笔记

C语言之指针中的&和*浅析

不知道大家在看objective-c中runtime和block源码的时候是不是比较费脑子,原因可能就是C语言的一些基础的东西理解不是特别深刻,今天就带大家看看...

28230
来自专栏数据派THU

独家 | 一文读懂神经网络(附解读&案例)

“你的大脑并不产生思想。你的思想塑造了神经网络。”——Deepak Chopra

8120

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励