zoukankan      html  css  js  c++  java
  • #pragma用法

    #pragma是一种预处理指令,作用是设定编译器的状态或者是指示编译器完成一些特定的动作。

    其格式一般为:#pragma Para。其中Para为参数。下面是一些常见用法。

    1、message

    ——在编译信息输出窗口中输出相应信息。

    例:#ifdef _X86

    #pragma message("_X86 macro activated!")

    #endif

    2、once

    ——保证头文件只被编译一次

    #pragma once与#ifndef / #define / endif 区别:

    1)#pragma once与编译相关,移植性差,不过现在基本上每个编译器都有这个定义;

    2)#pragma once如果头文件有多份拷贝,不能保证它们不被重复包含;

    3)#ifndef / #define / endif 是C++语言相关,所有支持C++语言的编译器都有效,移植性好;

    4)#ifndef / #define / endif 通过宏定义避免文件多次编译,这不仅保证同一文件不会被包含多次,也能保证内容完全相同的两个文件不会被不小心同时包含。

    3、warning

    ——修改编译器的警告消息的行为

    #pragma warning(push)--保存所有告警信息的现有告警状态

    #pragma warning(disable:4507 34)--不显示4507和34号警告信息

    #pragma warning(once:4835)--4835号警告信息仅报告一次

    #pragma warning(error:164)--把164号警告信息作为一个错误

    #pragma warning(disable:4507 34; once:4835; error:164)--综上

    #pragma warning(pop)--向栈中弹出最后一个告警信息,在入栈和出栈间所作的一切改动取消

    4、comment

    ——将一个注释记录放入一个对象文件或可执行文件中

    指令格式:#pragma comment(comment-type [, "comment-string"])

    comment-type是一个预定义标识符,指定注释类型,是compiler、exestr、lib、linker之一;

    comment-string是一个为comment-type提供附加信息的字符串。

    最常用的是:#pragma comment(lib, "*.lib")--链接指定库

    5、pack

    ——设置字节对齐长度

    实际使用规则:结构、联合或类的数据成员,第一个放在偏移为0的地方,以后每个数据成员的对齐,按照#pragma pack指定的数值和这个数据成员自身长度中,比较大的那个进行。但是当前者设置的值等于或超过最长数据成员的长度时,这个值的大小将不产生任何效果。而 结构整体的对齐,则按照结构体中最大的数据成员和#pragma pack指定值之间较小的那个进行。

    #pragma pack(show)--以警告信息的形式显示当前字节对齐的值

    #pragma pack(push)--将当前字节对齐值压入编译栈栈顶

    #pragma pack(n)--将当前字节对齐值设为n

    #pragma pack(push, n)--综上两句

    #pragma pack(pop)--将编译栈栈顶的字节对齐值弹出并设为当前值

    #pragma pack()--将当前字节对齐值设为默认值(通常是8)


  • 相关阅读:
    django core cache 永不失效配置
    zabbix-ODBC-oracle
    time
    zabbix中的触发器依赖
    Servlet1
    每周总结01
    使用IntelliJ IDEA集成TomCat
    hadoop环境配置
    《软件工程》学习进度条博客16
    03梦断代码读后感3
  • 原文地址:https://www.cnblogs.com/jkred369/p/4727450.html
Copyright © 2011-2022 走看看