当前位置:网站首页>C Expert Programming Chapter 1 C: Through the Fog of Time and Space 1.3 The Standard I/O Library and the C Preprocessor
C Expert Programming Chapter 1 C: Through the Fog of Time and Space 1.3 The Standard I/O Library and the C Preprocessor
2022-08-01 21:21:00 【weixin_Guest time】
Standard I/O Libraries and C Preprocessors
Some functions not implemented by C compilers must be implemented in other ways.In C, they are processed at runtime, either in application code or in a runtime library.In the C language, the vast majority of library functions or auxiliary programs need to be called explicitly.For example, in C (where necessary), the programmer must manage the use of dynamic memory, create arrays of various sizes, test array bounds, and perform range checking.
C originally did not define I/O, but provided by library functions.Later, this actually became the standard mechanism.
Portable I/O, written by Mike Lesk, first appeared in 1972, optimized and tailored to become the standard I/O library.
C Preprocessor
Initiator: Alan Snyder
Time: 1972
Three main functions implemented:
String replacement.Usually used to give a constant a symbolic name.
The header file contains.(The general declarations are separated into header files and can be used by many source files, although the convention uses a .h extension for header files)
An extension to the generic code template.Unlike functions, macros (marco) can receive arguments of different types in successive invocations (the actual arguments of the macro are just output as-is). In the expansion of a macro, whitespace can make a big difference to the expansion.
// 1.
#Define a (y) a_expanded (y)
a (x);a (y) a_expanded(y)
a(x);
is expanded to
(y) a_expanded(y)(x);
You might think that using curly braces in macros, like in other parts of C, would combine redundant statements into a single compound statement, but that's not the case.Preprocessors like macros should only be used in moderation.
//2.
/*People: Steve Bourne
*Location: Bell Labs
*Shell (command interpreter) for UNIX v7
*Use the preprocessor to make CThe language looks more like Algol-68
*/
#define STRING char *
#define IF if (
#define THEN ) {
#define ELSE } else (
#define FI ;}
#define WHILE while (
#define DO ) {
#define OD ;}
#define INT int
#define BEGIN {
#define END }
INT compare(s1, s2) STRING s1; STRING s2;
BEGIN
WHILE *s1++ == *s2
DO IF *s2++ == 0
THEN return(0)
FI
OD
return (*--s1 - *s2);
END
/*Translation, just replace it as it is*/
int compare(s1, s2) char *s1; char *s2;
{
while (*s1++ == *s2 ) {
if (*s2++ == 0) {
return (0);
}
;}
return (*--s1 - *s2);
} }
Corresponding C code:
int compare(s1, s2)
char *s1, *s2;
{
while (*s1++ == *s2) {
if (*s2 ++ == 0) Return (0);
}
Return (*-s1-*s2);
}
/*Shell does not use malloc, but uses sbrk to manage the heap storage itself, Steve explained,
* *The reason why he uses this special memory allocator is to improve the efficiency of string processing
* */
/*Bource's creation of this variant of C actually led to the whimsical International Obfuscated C Code Competition
* (The International Obfuscated C Code Competition)
*/
Macros are best used only to name constants and provide a shorthand notation for some appropriate construct.Macro names should be capitalized so that
can be easily distinguished from function calls.Never use the C preprocessor to modify the underlying structure of the language, because then C is not C.
边栏推荐
- Appendix A printf, varargs and stdarg A.3 stdarg.h ANSI version of varargs.h
- C陷阱与缺陷 第7章 可移植性缺陷 7.11 可移植性问题的一个例子
- C Expert Programming Chapter 1 C: Through the Fog of Time and Space 1.4 K&R C
- C陷阱与缺陷 第7章 可移植性缺陷 7.8 随机数的大小
- 图片识别商品接口 API:天猫淘宝
- 二分法中等 LeetCode6133. 分组的最大数量
- 虚拟内存与物理内存之间的关系
- Realize the superposition display analysis of DWG drawing with CAD in Cesium
- 【力扣】字符串相乘
- Record the first PR to an open source project
猜你喜欢
随机推荐
通过这两个 hook 回顾 Set/Map 基础知识
织梦发布文章提示body has not allow words错误
C陷阱与缺陷 第8章 建议与答案 8.2 答案
如何封装 cookie/localStorage/sessionStorage hook?
with语句和上下文管理器
Internet使用的网络协议是什么
C专家编程 第1章 C:穿越时空的迷雾 1.3 标准I/O库和C预处理器
R语言 线性回归的有关方法
测试开发人均年薪30w+?软件测试工程师如何进阶拿到高薪?
2022牛客多校联赛第五场 题解
如何优雅的性能调优,分享一线大佬性能调优的心路历程
分类接口,淘宝分类详情 API
Pytorch学习记录(八):生成对抗网络GAN
使用百度EasyDL实现厂区工人抽烟行为识别
LeetCode
JVM内存结构详解
C Expert Programming Chapter 1 C: Through the Fog of Time and Space 1.5 ANSI C Today
记录第一次给开源项目提 PR
织梦模板加入php代码
ahooks 是怎么处理 DOM 的?