当前位置:网站首页>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.
边栏推荐
- LVS负载均衡群集
- C Expert Programming Preface
- pytest:开始使用
- SkiaSharp 之 WPF 自绘 五环弹动球(案例版)
- C pitfalls and pitfalls Chapter 7. Portability pitfalls 7.10 Free first, then realloc
- Jmeter combat | Repeated and concurrently grabbing red envelopes with the same user
- R语言 pca主成分分析的主要方法
- 【中文树库标记---CTB】
- TP5-NPs负载噻吩类化合物TP5白蛋白纳米粒/阿魏酸钠新糖牛血清蛋白纳米粒
- 深拷贝浅拷贝
猜你喜欢
CS-NP白蛋白包覆壳聚糖纳米颗粒/人血清白蛋白-磷酸钙纳米颗粒无机复合材料
PyTorch笔记 - Attention Is All You Need (2)
方舟开服需要知道的那些事
How to choose Visibility, Display, and Opacity when interacting or animating
[Chinese tree tags - CTB]
方舟:生存进化PVE模式和PVP模式
Hiking, cured my mental internal friction
Realize the superposition display analysis of DWG drawing with CAD in Cesium
AIDL通信
ISC2022 HackingClub白帽峰会倒计时1天!最全议程正式公布!元宇宙集结,精彩绝伦!
随机推荐
R语言 线性回归的有关方法
C陷阱与缺陷 第8章 建议与答案 8.2 答案
使用员工管理软件,解锁人力生产力新水平,提高人力资源团队灵活性
Realize the superposition display analysis of DWG drawing with CAD in Cesium
Graph adjacency matrix storage
How to encapsulate the cookie/localStorage sessionStorage hook?
Hiking, cured my mental internal friction
空间数据库开源路,超图+openGauss风起禹贡
C Expert Programming Chapter 1 C: Through the Fog of Time and Space 1.1 The Prehistoric Phase of the C Language
An online JVM FullGC made it impossible to sleep all night and completely crashed~
SkiaSharp 之 WPF 自绘 五环弹动球(案例版)
P7215 [JOISC2020] 首都 题解
JS提升:如何中断Promise的链式调用
相亲模型与有限状态机
Jmeter combat | Repeated and concurrently grabbing red envelopes with the same user
How to make the timer not execute when the page is minimized?
C Pitfalls and Defects Chapter 7 Portability Defects 7.6 Memory Location 0
图片识别商品接口 API:天猫淘宝
列表页常见的 hook 封装
LeetCode·32.最长有效括号·栈·动态规划