我的C语言.条件编译与预处理指令

我的C语言.条件编译与预处理指令,第1张

#ifdef

  •  ifdef是判断后面标识符是否被#define定义。

  • 如果被定义了就执行#ifdef与#endif之间的语句。

  • 如果没有被定义就不会执行#ifdef与#endif之间的语句。

  • #ifdef只管后面的标识符是否被定义,如果标识符被定义了不管后面的标识符是何值都会被执行。

  •  #ifdef还可以与#else搭配使用。

  • 如果#ifdef后面的标识符没有被定义,就执行#else与#endif之间的语句,不执行#ifdef与#else之间的语句。

  • #ifdef只能与一个#else搭配使用,也就是说,根据标识符有没有被定义,二选一来执行。

  #ifndef

  •  #ifndef与ifdef的逻辑相反。

  • 如果#ifndef后面的标识符没有被定义,就执行#ifndef与#else之间的语句。

  • 如果被定义了,就执行#else与#endif之间的语句。

#if

  •  #if后面必须是一个常量表达式。

  • 基本逻辑与if语句相似,都是选择语句。

  • 上面三个例中执行:代码1,代码3,代码6。

#if defined与#if ! defined

  • #if defined()与#if ! defined()分别对应着#ifdef与#ifndef。

  •  #if defined()与#if ! defined()解决了#ifdef与#ifndef只能二选一的问题。

  • 如果C与CPP同时定义打印1,如果C与CPP其中一个被定义打印2,如果都没有定义打印3。

#include
" "与< >的区别

  •  " ":先在源文件所在目录下查找,如果该头文件未被找到,编译器就像查找库函数头文件一样在标准位置查找头文件。

    如果找不到就提示编译错误。

  • < >:直接去标准路径下去查找,如果找不到就提示编译错误。

  • " "最好用在自己的头文件,而< >用在引用库函数的头文件中。

    如果都用" "时间效率会降低。

怎样避免头文件重复包含

  • 所有头文件都必须带上条件编译,防止被重复包含!
  • 那么,重复包含一定报错吗?
  • 不会!重复包含,会引起多次拷贝,主要会影响编译效率!同时,也可能引起一些未定义错误,但是特别少。

  • #include本质是把头文件中相关内容,直接拷贝至源文件中。


#undef

  •  #undef用于取消#define定义的标识符与宏
  • 所以,我们要清楚#define的作用范围,从定义语句开始一直往下都能作用,除非遇到#undef。


#error
  • 核心作用是可以进行自定义编译报错。

 #line
  • 先了解一下预定义符号

  • 本质是可以定制化你的文件名称和代码行号,很少使用。

#pragma
  • #pragma message()作用:可以用来进行对代码中特定的符号(比如其他宏定义)进行是否存在进行编译时消息提醒。

  • #pragma warning(disable:XXXX)是禁止某些错误报错。

  • #pragma pack( )修改默认对齐数。

  • #pragma once防止头文件重复包含。

 

 

 

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/674343.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-19
下一篇 2022-04-19

发表评论

登录后才能评论

评论列表(0条)

保存