预处理

  • define:
    定义宏

  • #ifndef:
    if not define 如果未定义则编译下面代码

    • 例如
      #ifndef MYTINYSTL_VECTOR_H_
      // 如果多次调用该头文件,只编译一次
      #define MYTINYSTL_VECTOR_H_
  • #ifdef:
    #ifdef max
    // #if ...
    #pragma message("#undefing marco max")\

  • \ #undef max
    // 取消定义宏\

  • #endif:
    // endif, elif... 即if语句

    #if 0
    balabala
    #endif
    //相当于多行注释,不执行
    
  • #error:
    停止编译并显示错误信息

  • #pragma:
    一般作用是为特定的编译器提供特定的编译指示\

    1. pragma once

    在头文件的最开始处加上这句话,就可以避免头文件的重复引用(include)。它的作用就是保证每个头文件只编译一次,再加入同名的头文件也没有关系(反正也不编译,且不会报错)。
    ->if 也可实现

    1. #pragma message
    #ifdef max
    #pragma message("#undefing marco max")
    // 打印:取消宏定义
    #undef max
    #endif // max
    当忘记了某个关键的宏是否正确的设置了。
    通过if...判断-> message "打印"  
    
    1. #pragma hdrstop

    当出现这条语句代表预编译头文件到此为止,后面的将不再参与预编译。通常这样做用来指定编译优先级。

    1. #pragma warning

    此指令用于和warning有关的操作(即非致命编程错误的警告)。

    具体示例:

      #pragma warning (disable:4707)     //屏蔽4707警告
    
      #pragma warning (once:4706)         //只显示一次4706警告
    
      #pragma warning (error:164)           //将164号警告当作一个错误。
    
      也可以三合一写成:#pragma warning (disable:4707;once:4706;error:164)
    
    1. #pragma comment

    该指令用于导入库。

    例如:#pragma comment (lib,"user32.lib")

    将user32.lib 库文件导入本工程中。

    1. #pragma pack
      内存对齐 详解博客
    • 例如:
    连续存储结构字节对齐方式相同
    int data[4];
    sizeof(data[4]) // 输出值为16
    结构体中未指定数值时:[系统默认的对齐模数4/8字节]和[结构体内部最大的基本数据类型成员]长度中数值较小者。
    struct {
        int a;    // 4
        char b;   // 1
        string c; // 24
    }node;
    sizeof(node) // 输出32
    
    #pragma pack(1)
    struct {
        int a;    // 4
        char b;   // 1
        string c; // 24
    }node;
    sizeof(node) // 输出29
    
    
        
    
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。