预编译指令

2018-04-24  创建人:Ruo_Xiao
开发环境:VS2010
邮箱:xclsoftware@163.com

1、__FILE__:本行语句所在源文件的文件名。
2、__LINE__:本行语句在源文件中的位置信息。
3、#line:重新设定上述两个变量的值。
语法格式:“#line number[“filename”]”
栗子:

#include <string>
#include <iostream>
using namespace std;

int main() 
{
    cout<<__FILE__<<endl;
    cout<<__LINE__<<endl;
#line 520 "嘿嘿嘿"
    cout<<__FILE__<<endl;
    cout<<__LINE__<<endl;
    cin.get();
    return 0;
}

这里写图片描述
4、#error:在编译时输出错误信息
栗子:

#include <string>
#include <iostream>
using namespace std;

int main() 
{
#error My Error! 
    cin.get();
    return 0;
}

输出信息:fatal error C1189: #error : My Error!
5、#pragma
(1)#pragma once:保证该头文件只被编译一次。
(2)#pragma message:编译器编译到该条语句时输出其后面的文本。
栗子:

#pragma message("哈哈哈!")

编译器输出:
这里写图片描述
(3)#pragma warning

#pragma warning(disable : 4507 34; once : 4385; error : 164)

功能如下:
A、禁止警告信息的显示,上栗中的disable,禁止显示警告信息4507和34;
B、显示一次,上栗中的once,4385只显示一次;
C、提高警告信息为错误,上栗中的error,警告164升级为错误;
D、保存编译器警告的状态:#pragma warning(push,n),n表示设计全局警告等级。
E、恢复该状态:#pragma warning(pop)。
栗子:

#pragma warning(push)           //保存编译器警告状态  
#pragma warning(disable:4244)   //取消4244的警告  
    int i = 7.4;                //无警告信息  
#pragma warning(pop)            //恢复之前的警告转改  
    int k = 5.3;                //warning C4244: “初始化”: 从“double”转换到“int”,可能丢失数据
    return 0;

(4)#pragma comment
A、作用:该指令将一个注释记录放入一个对象文件或可执行文件中。
B、使用方法:#pragma comment(comment-type ,“……”)
C、comment-type是一个预定义的标识符,指定注释的类型,应该是compiler,exestr,lib,linker之一。
栗子:导入lib文件

#pragma comment(lib, "my.lib")

(5)#pragma pack
设置内存的对齐长度。
栗子:

#pragma pack(4)

struct A
{
    char a;
    int k;
};

int main() 
{
    cout<<sizeof(A)<<endl;
    cin.get();
    return 0;
}

结果:5

(SAW:Game Over!)

猜你喜欢

转载自blog.csdn.net/itworld123/article/details/80063510