文档章节

C Primer Plus 第4章 字符串和格式化输入输出--4.3 常量和预处理器

idreamo
 idreamo
发布于 2016/05/11 05:55
字数 671
阅读 6
收藏 0
点赞 2
评论 0

如何建立一个符号常量呢?

一个方法是声明一个变量,并设置该变量等于所需的常量。但变量的值是有可能被意外改变的。

C原来就提供了一个更好的方法是C预处理器。

预处理器也允许定义常量。只须在程序文件的顶部添加如下信息即可:

#define TAXRATE 0.015

当编译您的程序时,值0.015将会在TAXRATE出现的每一个地方替代它。这称为编译时代入法。

这样定义的常量通常被称为明显常量。

注意格式:首先是#define,其次是常量的符号名称,接着是常量的值。一般形式如下

#define NAME value

没有使用分号,是因为这是和种替代机制,而不是C的语句。

键入大写的常量是一个明智的C传统。这样当您在程序中间遇到大写的符号名时,您会立即知道这是一个常量而不是变量。

符号常量所使用的名字必须满足变量命名规则,可以使用大写和小写字母、数字和下划线字符。第一个字符不能是数字。

程序清单4.4 pizza.c程序

/*pizza.c--在这个比萨饼的例子中使用定义常量*/
#include <stdio.h>
#define PI 3.14159 
int main()
{
    float area,circum,radius;
    
    printf("What is the radius of your pizza?\n");
    scanf("%f",&radius);
    area=PI*radius*radius;
    circum=2.0*PI*radius;
    printf("Your basic pizza parameters are as follows:\n");
    printf("circumference=%l.2f,area=%l.2f\n",circum,area);
    return 0;
}

​#define 语名也可以用于定义字符和字符串常量 ,前者使用单引号,后者使用双引号;

#define BEEP '\a'

#define TEE 'T'

#define ESC '\033'

#define OOPS "Now you have done it! "

请记住,符号名后的所有内容都被用来代替它。

4.3.1 const 修饰符

C90新增加了创建符号常量的第二种方法,即可以使用const关键字把一个变量声明转换成常量声明:

const int MONTHS=12;  //MONTHS是一个代表12的符号常量

这就使MONTHS成为一个只读值。这个新方法,比使用#define更灵活。

4.3.2 系统定义的明显常量

C头文件limits.h和float.h分别提供有关整数类型和浮点类型的大小限制的详细信息。每个文件都定义了一系列应用于您的实现的明显常量。

C预处理器是个极其有用的工具,所以在可能的时候要尽量利用它。

 

© 著作权归作者所有

共有 人打赏支持
idreamo
粉丝 12
博文 139
码字总数 224743
作品 0
青岛
产品经理
#define 中的“ # 运算符”和“ ## 运算符”

利用宏参数创建字符串:# 运算符 在类函数宏(function-like macro)的替换部分中,“#”符号用作一个预处理运算符,它可以把语言符号(token)转化为字符串。例如,如果 x 是一个宏参量,那...

TMDJoJo ⋅ 2012/07/07 ⋅ 0

[编程语言]C陷阱与缺陷

内容摘要 作者以自己1985年在Bell实验室时发表的一篇论文为基础,结合自己的工作经验扩展成为这本对C程序员具有珍贵价值的经典著作。写作本书的出发点不是要批判C语言,而是要帮助C程序员绕过...

21gprs ⋅ 2014/05/23 ⋅ 0

【C++】第5章 循环和关系表达式 知识总结

《C++ Primer Plus》第5章知识点总结 for循环 for(initialization; test-expression; update-expression) body 语句:age = 100; 表达式:age = 100 对于 for( int i=0 ;i<5 ;i++),这种语句......

qq_37792173 ⋅ 2017/09/26 ⋅ 0

C Primer Plus 第11章 11.7 ctype.h字符函数和字符串

第7章“C控制语句 分支和跳转”介绍了ctype.h系列字符相关的函数。这些函数不能被 应用于整个字符串,但是可以被应用于字符串中的个别字符。程序清单11.26定义了一个函数,它把toupper( )函数...

idreamo ⋅ 2016/08/27 ⋅ 0

【C++】第1-2章 C++基础 知识总结

《C++ Primer Plus》第1-2章知识点总结 首先声明,本文总结内容均是在一定的C语言基础上进行的总结,因为第1-2章内容不多,所有知识点可能有些零散,不过都是刚学的容易忽略的知识点 C++融合...

qq_37792173 ⋅ 2017/09/19 ⋅ 0

C Primer Plus 第2章 C语言概述

2.1一个简单的实例 程序清单2.1 first.c程序 ------ #include <stdio.h> int main() { int num; num=1; printf("I am a simple"); printf("computer.n"); printf("My favorite number is %d......

idreamo ⋅ 2016/05/07 ⋅ 0

[基础] Java目录(摘自Java核心技术·卷1 基础知识)

Java核心技术·卷1 基础知识(原书第9版) 第1章 Java程序设计概述 1.1 Java程序设计平台 1.2 Java“白皮书”的关键术语 1.2.1 简单性 1.2.2 面向对象 1.2.3 网络技能 1.2.4 健壮性 1.2.5 安...

be-quiet ⋅ 2015/03/08 ⋅ 0

C Primer Plus 第11章 字符串和字符串函数 11.3 字符串输出

11.3.1 puts( )函数 puts( )函数的使用很简单,只需要给出字符串参数的地址。程序清单11.8列出了输出字符串的多种方式。 程序清单11.8 put_out.c程序 输出如下: 注意,每个字符串都单行显示...

idreamo ⋅ 2016/08/19 ⋅ 0

C++ Primer 学习笔记(第三章:字符串、向量和数组)

C++ Primer 学习笔记(第三章:字符串、向量和数组) [TOC] 3.1 命名空间的声明 声明语句可以一行放多条。 位于头文件的代码,一般来说不应该使用声明。因为其内容会拷贝到每个使用该头文件的...

ShawnLue ⋅ 2015/08/20 ⋅ 0

C++ primer第二次阅读学习笔记(第1、2章)

C++ primer第二次阅读学习笔记(第1、2章) 一年前开始了C++primer的第一遍阅读,一年之后重新拾起C++primer。原因有二,一:第一遍阅读时刚开始接触C++,对C++认识有限,学习C++primer不可能...

长平狐 ⋅ 2012/10/08 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

浅谈springboot Web模式下的线程安全问题

我们在@RestController下,一般都是@AutoWired一些Service,由于这些Service都是单例,所以并不存在线程安全问题。 由于Controller本身是单例模式 (非线程安全的), 这意味着每个request过来,...

算法之名 ⋅ 今天 ⋅ 0

知乎Java数据结构

作者:匿名用户 链接:https://www.zhihu.com/question/35947829/answer/66113038 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 感觉知乎上嘲讽题主简...

颖伙虫 ⋅ 今天 ⋅ 0

Confluence 6 恢复一个站点有关使用站点导出为备份的说明

推荐使用生产备份策略。我们推荐你针对你的生产环境中使用的 Confluence 参考 Production Backup Strategy 页面中的内容进行备份和恢复(这个需要你备份你的数据库和 home 目录)。XML 导出备...

honeymose ⋅ 今天 ⋅ 0

JavaScript零基础入门——(九)JavaScript的函数

JavaScript零基础入门——(九)JavaScript的函数 欢迎回到我们的JavaScript零基础入门,上一节课我们了解了有关JS中数组的相关知识点,不知道大家有没有自己去敲一敲,消化一下?这一节课,...

JandenMa ⋅ 今天 ⋅ 0

火狐浏览器各版本下载及插件httprequest

各版本下载地址:http://ftp.mozilla.org/pub/mozilla.org//firefox/releases/ httprequest插件截至57版本可用

xiaoge2016 ⋅ 今天 ⋅ 0

Docker系列教程28-实战:使用Docker Compose运行ELK

原文:http://www.itmuch.com/docker/28-docker-compose-in-action-elk/,转载请说明出处。 ElasticSearch【存储】 Logtash【日志聚合器】 Kibana【界面】 答案: version: '2'services: ...

周立_ITMuch ⋅ 今天 ⋅ 0

使用快嘉sdkg极速搭建接口模拟系统

在具体项目研发过程中,一旦前后端双方约定好接口,前端和app同事就会希望后台同事可以尽快提供可供对接的接口方便调试,而对后台同事来说定好接口还仅是个开始、设计流程,实现业务逻辑,编...

fastjrun ⋅ 今天 ⋅ 0

PXE/KickStart 无人值守安装

导言 作为中小公司的运维,经常会遇到一些机械式的重复工作,例如:有时公司同时上线几十甚至上百台服务器,而且需要我们在短时间内完成系统安装。 常规的办法有什么? 光盘安装系统 ===> 一...

kangvcar ⋅ 昨天 ⋅ 0

使用Puppeteer撸一个爬虫

Puppeteer是什么 puppeteer是谷歌chrome团队官方开发的一个无界面(Headless)chrome工具。Chrome Headless将成为web应用自动化测试的行业标杆。所以我们很有必要来了解一下它。所谓的无头浏...

小草先森 ⋅ 昨天 ⋅ 0

Java Done Right

* 表示难度较大或理论性较强。 ** 表示难度更大或理论性更强。 【Java语言本身】 基础语法,面向对象,顺序编程,并发编程,网络编程,泛型,注解,lambda(Java8),module(Java9),var(...

风华神使 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部