当前位置:网站首页>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.
边栏推荐
- win10版本1803无法升级1903系统如何解决
- Day016 类和对象
- C专家编程 序
- 深拷贝浅拷贝
- MySQL 中出现的字符编码错误 Incorrect string value: ‘\x\x\x\x‘ for column ‘x‘
- pytest:开始使用
- C陷阱与缺陷 第8章 建议与答案 8.2 答案
- JSD-2204-Knife4j框架-处理响应结果-Day07
- C Pitfalls and Defects Chapter 7 Portability Defects 7.11 An Example of a Portability Problem
- C陷阱与缺陷 第5章 库函数 5.5 库函数signal
猜你喜欢
随机推荐
LeetCode·32.最长有效括号·栈·动态规划
淘宝获取收货地址列表的 API
包含吲哚菁绿的多聚体白蛋白纳米球/载马钱子碱纳米粒的牛血清白蛋白微球的制备
360借条安全专家:陌生微信好友不要轻易加贷款推广多是诈骗
idea实用快捷键合集——持续更新
C pitfalls and pitfalls Chapter 8 Suggestions and answers 8.2 Answers
LeetCode·每日一题·1374.生成每种字符都是奇数个的字符串·模拟
C Expert Programming Chapter 1 C: Through the Fog of Time and Space 1.2 Early Experience of C Language
二分法中等 LeetCode6133. 分组的最大数量
图片识别商品接口 API:天猫淘宝
方舟:生存进化官服和私服区别
C Expert Programming Chapter 1 C: Through the Fog of Time and Space 1.5 ANSI C Today
C Pitfalls and Defects Chapter 7 Portability Defects 7.9 Case Conversion
Day016 类和对象
一个关于操作数据库的建议—用户密码
Pytest: begin to use
Transformer学习
关于Request复用的那点破事儿。研究明白了,给你汇报一下。
RecycleView的使用
C pitfalls and pitfalls Chapter 7. Portability pitfalls 7.10 Free first, then realloc