C语言入门-宏及预处理器

1、宏定义

#define TRUE 1

#define PI 3.14

#define MYNAME "Damon"

宏可以定义 整型 ,浮点型,字符型,字符串类型。

2、_FILE_预处理常量

#include

void main(void)

{

               printf("The file %s is under Beat testing",_FILE_);  //_FILE_就是文件名字
}

3、_LINE_预处理命令常量

对于大型的项目有时需要预处理器知道当前源文件的当前行号

#include

void main(void)

{

               printf("The Program run to line %d",_LINE_);  //_LINE_就是运行的行数

4、改变预处理器的行数

在C语言中提供了#line的预处理,准许用户改变当前行数,下面预处理器将行数定位于100行

#line 100

#line 1 "FILENAME.C"

chag_line.c说明了#line的用法

#include

void main(void)

{

               printf("File %s: Successfully reachedto line %d",_FILENAME_,_LINE_);  //_LINE_就是运行的行数

                #line 100 "FILENAME.C"//改变源文件的名称

                printf("File %s: Successfully reachedto line %d",_FILENAME_,_LINE_);  //_LINE_就是运行的行数
}

运行结果:

File chag_line.c:Successfully reached line 6

File FILENAME.c:Successfully reached line 102

5、生成无条件预处理错误

#error The routine string_sort now uses far strings

6、记录预处理时间

#include

void main(void)

{

               printf("Beat Testing : Last compiled %s %s",_DATE_,_TIME_);
}

7、判断是否是ANSI C编译

#include

void main(void)

{

            #ifdef _STDC_

                    printf("ANSI C compliance\n");

            #else 

                     printf("Not in ANSI C mode");

            #endif
}

8、判断是否用的C++

#include

void main(void)

{

               #ifdef _cplusplus

                        printf("Using C++\n");

               #else

                         printf("Using C\n");

              #endif
}

9、取消宏或者常量

#undef _toupper

#defne _toupper(c)   ((((c)>='a')&&((c)<='z')) ? (c) -'a'+'A':c)

10、比较宏与函数

如果比较注重效率和速度,就用宏,如果比较在乎程序大小就用函数。

11、预定义的值和宏都在include的目录下,可以好好参考下。

12、#include

       #include“my.h” 引号是从当前的目录下找到头文件,而“<>”是在头文件的子路录下找。

13、如何判断符号是否已定义

       #ifdef  symbole

             //statement

        #endif

        #ifndef symbole

               //statement

         #endif

14、进行if —— else预处理

        #ifdef _MSC_VER

               printf("Microsoft");

       #endif

       #ifdef _BORLANDC_

               printf(“Borland”);

       #endif 

15、预处理可以像if else 一样可以嵌套 进行条件筛选。

       #if defined(MY_LIBRRARY)

       //Statement

       #else if defined (MY_RSOUTINES)

       //Statement

       #else 

       //Statement

       #endif

16、定义多行的宏和常量

       #define very_long_character_string "This extremely long string 

        constant\

         requires tow lines "

          用反斜杠来做连接符。

17、在宏定义中不要放分号,也不要随意放置空格。

18、自建宏

        #define SUM(X,Y)  ((X)+(Y))   //不能加分号。

       #define MIN(x,y) ((x)<(y)?(x):(y))

       #define MAX(x,y) ((x)>(y)?(x):(y))

19,作为规则宏参数一定放在括号里。

你可能感兴趣的:(学习笔记)