1.#pragma pack
設置字節對齊係數 ,用法如下
#pragma pack(push, length)//保存原來對齊大小,並設置對齊大小,length是一個正整數一般爲2^n
class....{
}
#pragma pack(pop) //恢復原本對齊大小
具體用法寫在了這篇博客:https://blog.csdn.net/qq_40238526/article/details/103000349
2.deprecated
語法
[[deprecated
]]
[[deprecated(
字符字面量)]]
解釋
下列名字或實體的聲明中允許使用這個屬性:
- class / struct / union:struct [[deprecated]] S;
- typedef 名,也包括別名聲明:[[deprecated]] typedef S* PS; 、using PS [[deprecated]] = S * ; ,
- 變量,包括靜態數據成員:[[deprecated]] int x; ,
- 非靜態數據成員:union U { [[deprecated]] int n; }; ,
- 函數:[[deprecated]] void f(); ,
- 命名空間:namespace [[deprecated]] NS { int x; },
- 枚舉:enum [[deprecated]] E {}; ,
- 枚舉項:enum { A [[deprecated]], B [[deprecated]] = 42 }; ,
- 模板特化:template<> struct [[deprecated]] X<int> {}; 。
指示允許使用聲明有此屬性的名稱或實體,但因故不鼓勵使用。編譯器通常會對其使用情況發出警告。若指定了 字符字面量,則它通常被包含於警告中。
以上內容來自:https://zh.cppreference.com/w/cpp/language/attributes/deprecated
由於沒有示例,在此自己編寫了一個例子,如下:
#include <iostream>
using namespace std;
struct[[deprecated("已經棄用")]] S{
};
int main()
{
S s;
}
運行結果如下:
所以在使用STL array的時候,如果你用了assign會報錯的原因
#define _DEPRECATE_TR1_NAMESPACE [[deprecated("warning STL4002: " \
"The non-Standard std::tr1 namespace and TR1-only machinery are deprecated and will be REMOVED. You can " \
"define _SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING to acknowledge that you have received this warning.")]]
#pragma push_macro
語法
#pragma push_macro("宏定義名稱")
#undef 宏定義名稱
//do something...
#pragma pop_macro("宏定義名稱")
解釋
取消宏定義,並將宏定義壓入棧,最後通過pop彈出宏定義
例子
不報錯。
使用push_macro將INT壓入棧保存,使它失去原來的宏定義
報錯。
使用pop_macro將INT彈出,恢復宏定義
不報錯
在STL中有以下定義
這個意思就是取消對new的宏定義,並恢復其原有定義,估計原本對new的定義進行了更改。例如
#define new new(_FILE)
#pragma warning
#pragma warning允許有選擇性的修改編譯器的警告消息的行爲
#pragma warning( disable : 4507 34; once : 4385; error : 164 )
等價於:
#pragma warning(disable:4507 34) // 不顯示4507 和34 號警告信息
#pragma warning(once:4385) // 4385 號警告信息僅報告一次
#pragma warning(error:164) // 把164 號警告信息作爲一個錯誤。
同時這個pragma warning 也支持如下格式:
#pragma warning( push [ ,n ] )
#pragma warning( pop ) //這裏n 代表一個警告等級(1---4)。
#pragma warning( push )保存所有警告信息的現有的警告狀態。
#pragma warning( push, n)保存所有警告信息的現有的警告狀態,並且把全局警告等級設定爲n。
#pragma warning( pop )向棧中彈出最後一個警告信息,在入棧和出棧之間所作的一切改動取消。例如:
#pragma warning( push )
#pragma warning( disable : 4705 )
#pragma warning( disable : 4706 )
#pragma warning( disable : 4707 )
//.......
#pragma warning( pop )
在這段代碼的最後,重新保存所有的警告信息(包括4705,4706 和4707)。