- C - Discussion
- C - Useful Resources
- C - Quick Guide
- C - Input & Output
- C - Typedef
- C - Bit Fields
- C - Unions
- C - Structures
- C - Strings
- C - Pointers
- C - Arrays
- C - Scope Rules
- C - Functions
- C - Loops
- C - Decision Making
- C - Operators
- C - Storage Classes
- C - Constants
- C - Variables
- C - Data Types
- C - Basic Syntax
- C - Program Structure
- C - Environment Setup
- C - Overview
- C - Home
C Program Tutorial
Selected Reading
- Who is Who
- Computer Glossary
- HR Interview Questions
- Effective Resume Writing
- Questions and Answers
- UPSC IAS Exams Notes
C - Preprocessors
C 预处理器 不是汇编者的一部分,而是汇编过程中的一个单独步骤。 简言之,C Preprocessor只是一种案文替代工具,它指示汇编者在实际汇编之前做必要的预处理。 我们把C Preprocessor称为CPP。
所有前处理器的指挥均以散射文号(#)开始。 它必须是第一个不空白的特性,对于可读性来说,先处理者指令应在第一栏开始。 以下各节列出了所有重要的加工前指令——
Sr.No. | Directive & Description |
---|---|
1 | #define 替代加工前的宏观。 |
2 | #include 从另一个档案中插入一个特别标题。 |
3 | 不确定的是加工前宏观。 |
4 | #ifdef 如果确定这一宏观方法,回归就属实。 |
5 | #ifndef> 如果不界定这一宏观因素,就会出现真正的回归。 |
6 | 如果是汇编时间条件,则进行测试。 |
7 | <#else> 替代标准。 |
8 | 页: 1 |
9 | 终端处理前条件。 |
10 | 页: 1 斜线上的印刷错误信息。 |
11 | #pragma 采用标准化方法向汇编者发布特别指挥。 |
Preprocessors Examples
分析以下例子,以了解各种指示。
#define MAX_ARRAY_LENGTH 20
这项指令告诉购买力平价,用20个数字取代Lex_ARRAY_LENGTH。 使用#define,用于增加可读性。
#include <stdio.h> #include "myheader.h"
这些指示将CPP从System Libraries带走,并将案文添加到目前的来源档案中。 下一条线指CPP获得myheader.h。 从当地目录中删除,并将内容添加到现有来源档案中。
#undef FILE_SIZE #define FILE_SIZE 42
它告诉加拿大人民党,不要忘记现有的国际自由论坛。 SIZE, 并将其定义为42。
#ifndef MESSAGE #define MESSAGE "You wish!" #endif
它告诉加拿大竞争主管机构,只有MESSAGE已经界定了。
#ifdef DEBUG /* Your debugging statements here */ #endif
它告诉加拿大人民党,如果确定数字,将处理所附声明。 如果你在汇编时通过-DDEBUG旗帜给电梯编辑,则这样做是有益的。 这将界定德国航天中心,因此,在汇编过程中,你可以转而浏览该传单。
Predefined Macros
ANSI C界定了一些宏观。 虽然每个方案都可以用于方案拟订,但事先确定的宏观办法不应直接修改。
Sr.No. | Macro & Description |
---|---|
1 | 本日为“MMM DD YYYY”格式的特性。 |
2 | 目前的特征是“HHH:MM:SS”格式。 |
3 | 其中载有目前档案名称作为直面字。 |
4 | 现有线数为少数。 |
5 | 在汇编者遵守ANSI标准时,定义为1。 |
举几个例子:
#include <stdio.h> int main() { printf("File :%s ", __FILE__ ); printf("Date :%s ", __DATE__ ); printf("Time :%s ", __TIME__ ); printf("Line :%d ", __LINE__ ); printf("ANSI :%d ", __STDC__ ); }
如果在文件测试.c中汇编和执行上述代码,则会产生以下结果:
File :test.c Date :Jun 2 2012 Time :03:36:24 Line :8 ANSI :1
Preprocessor Operators
C 加工商向以下经营者提供帮助创造宏观产品——
The Macro Continuation () Operator
宏观通常限于一行。 宏观继续经营人()用于维持一个太长的单行。 例如:
#define message_for(a, b) printf(#a " and " #b ": We love you! ")
The Stringize (#) Operator
在宏观定义中使用强度或编号操作者(第......号)时,将宏观参数转换成直线不变。 这种经营者只能用于具有特定论点或参数清单的宏观。 例如:
#include <stdio.h> #define message_for(a, b) printf(#a " and " #b ": We love you! ") int main(void) { message_for(Carole, Debra); return 0; }
如果上述法典得到编纂和执行,则会产生以下结果:
Carole and Debra: We love you!
The Token Pasting (##) Operator
在宏观定义中,象征性的投产者(#)结合了两个论点。 它允许将宏观定义中的两条单独标注并入一个标注。 例如:
#include <stdio.h> #define tokenpaster(n) printf ("token" #n " = %d", token##n) int main(void) { int token34 = 40; tokenpaster(34); return 0; }
如果上述法典得到编纂和执行,则会产生以下结果:
token34 = 40
之所以出现这种情况,是因为这一例子使加工商的实际产出如下:
printf ("token34 = %d", token34);
这一例子表明,把“标的”号划入“象征性”34,我们在此同时使用了stringize和token-pasting。
The Defined() Operator
预先处理器界定的操作器在固定表述中加以使用,以确定识别符号是否使用标准。 如果确定具体识别符号,该数值是真实的(非零)。 如果对符号未作界定,其价值为虚假(零)。 定义的运营商具体如下:
#include <stdio.h> #if !defined (MESSAGE) #define MESSAGE "You wish!" #endif int main(void) { printf("Here is the message: %s ", MESSAGE); return 0; }
如果上述法典得到编纂和执行,则会产生以下结果:
Here is the message: You wish!
Parameterized Macros
购买力平价的强大功能之一是能够利用参数宏观模拟功能。 例如,我们可能有以下一些法典:
int square(int x) { return x * x; }
我们可以使用以下宏观方法在法典之上重写:
#define square(x) ((x) * (x))
必须使用#define指令来界定有争论的Macros,然后才能使用。 论点清单载于括号中,必须立即遵循宏观名称。 不允许在宏观名称和开放的括号之间使用空间。 例如:
#include <stdio.h> #define MAX(x,y) ((x) > (y) ? (x) : (y)) int main(void) { printf("Max between 20 and 10 is %d ", MAX(10, 20)); return 0; }
如果上述法典得到编纂和执行,则会产生以下结果:
Max between 20 and 10 is 20Advertisements