首页 > 编程语言 >C++预定义指令

C++预定义指令

时间:2022-11-12 16:35:31浏览次数:50  
标签:__ 定义 C++ 编译 指令 预定 define

C++预定义指令

1.预定义器

以#开头的命令,称之为预定义器指令。预定义器指令不在编译器中执行,而是在预定义器中运行。

常见的预定义器指令为

//文件包含指令
#include 
//宏定义指令
#define
#undef
//条件编译指令
#ifdef
#endif
#ifndef
#endif
#if
#else

2.预定义表示宏

__cplusplus:当翻译单元编译为 C++ 时,定义为整数文本值。 其他情况下则不定义。
__ DATE __:当前源文件的编译日期。
__ FILE __:当前源文件的名称。
__ LINE __:定义为当前源文件中的整数行号。
__ func __ 作为函数本地静态 const 数组的封闭函数的未限定和未限定名称 char。
void example()
{
    printf("%s\n", __func__);
}
cout << "This is the line number " << __LINE__;
cout << " of file " << __FILE__ << ".\n";
cout << "Its compilation began " << __DATE__;
cout << " at " << __TIME__ << ".\n";
cout << "The compiler gives a __cplusplus value of " << __cplusplus;
example();

3.宏定义使用

宏定义语法:

#define identifier replacement // 宏定义
#undef identifier // 取消宏定义

详细使用:

#define Math 10//值形态
#define PI 100
#define GetSum(a,b) (a)+(b)//函数宏,函数宏中的变量最好用()包裹,以免发生报错

4.条件编译

#ifdef PI//条件编译,只有在PI宏已经定义后才可以进行编译
    std::cout << PI << std::endl;
#endif
#ifndef PT
  std::cout<<"在PT宏没有被定义的时候打印该行数据"<<endl;
#endif
 //#if #else ,和if,else语句类似

5.报错预定义符

#error
//该预定义符,一般用于编译调试的时候,编译器在执行到这里的时候,自动报错,中断程序

6.line处理

#line 10 "文件名"
//将下面的代码,行数和文件名设置为line设置的行数和文件名
//如果不设定的话,行数和文件名自动设置为改行所在的行数和文件名

7.代码案列

//预处理指令和宏
#include <iostream>
#include<stdio.h>
//宏定义
#define Math 10//值形态
#define PI 100
//取消宏定义,取消宏定义放到main()之前,则会报错.需要放在mian函数之中
//#undef Math
#define GetSum(a,b) (a)+(b)//函数宏
using namespace std;

void example()
{
    printf("%s\n", __func__);
}


int main(int argc, char *argv[])
{
    #undef Math//取消宏定义
    int a=10;
    int b=10;
    int c=GetSum(a,b);//调用函数宏
    cout<<"c="<<c<<endl;

#ifdef PI//条件编译,只有在PI宏已经定义后才可以进行编译
    std::cout << PI << std::endl;
#endif
#ifndef PT
  std::cout<<"在PT宏没有被定义的时候打印该行数据"<<endl;
#endif

 //#if #else ,和if,else语句类似

 //预定义宏
  /*
   预定义宏仅针对特定生成环境或编译器选项定义。 除非另行说明,否则这些宏的定义范围适用于整个翻译单元。
   定义后,预处理器先将这些宏展开为指定的值,然后再编译。 预定义宏不带参数,不能重新定义。
  */
    cout << "This is the line number " << __LINE__;
    cout << " of file " << __FILE__ << ".\n";
    cout << "Its compilation began " << __DATE__;
    cout << " at " << __TIME__ << ".\n";
    cout << "The compiler gives a __cplusplus value of " << __cplusplus<<endl;


    //#line处理
    cout<<"该行代码所在的行数为"<<__LINE__<<"文件所在的位置为"<<__FILE__<<endl;
#line 50 "main.cpp" //#line指令允许我们控制这两件事,代码文件中的行号以及发生错误时我们希望显示的文件名。它的格式是
    cout<<"该行代码所在的行数为"<<__LINE__<<"文件所在的位置为"<<__FILE__<<endl;

//#error用于报错,在调试程序的时候用得上

//预定义表示符
     example();
/*
__cplusplus:当翻译单元编译为 C++ 时,定义为整数文本值。 其他情况下则不定义。
__ DATE __:当前源文件的编译日期。
__ FILE __:当前源文件的名称。
__ LINE __:定义为当前源文件中的整数行号。
*/
    cout << "This is the line number " << __LINE__;
    cout << " of file " << __FILE__ << ".\n";
    cout << "Its compilation began " << __DATE__;
    cout << " at " << __TIME__ << ".\n";
    cout << "The compiler gives a __cplusplus value of " << __cplusplus;
   return 0;
}

标签:__,定义,C++,编译,指令,预定,define
From: https://www.cnblogs.com/yidianxingyuan/p/16884036.html

相关文章

  • C++学习------cerrno头文件的作用与源码学习
    引言cerrno是C++对errno.h头文件的封装,里面实现了一个errno宏,返回上一次的错误码。我们来看看这个宏的具体实现以及其背后的原理。cerrno头文件代码位置:​​www.aospxref.......
  • 理解C++中 const 在指针中的用法
    intmain(){ int*constarray; constint*array; inta=10; array=&a;//Youcan'texchangearrayself,arrayjustisaintegar// *array=13;//Thisiserror......
  • bochs调试方法与指令详解
    参考:https://blog.csdn.net/liu0808/article/details/53099099#t0bochs调试FAQ:一基本调试命令1.       Q:如何从引导扇区开始设置断点?A:BIOS被载入内存中......
  • C++飞机票订票系统
    C++飞机票订票系统题目7飞机票订票系统问题描述:某公司每天有10航班(航班号、价格),每个航班的飞机,共有80个座位,分20排,每排4个位子。编号为A,B,C,D。如座位号:10D表示1......
  • C++一元多项式计算器的设计与实现
    C++一元多项式计算器的设计与实现七、一元多项式计算器的设计与实现1.基于动态数组或者链表实现--元多项式的计算,可以使用STL的vector或者list。2.在系统中需要提供必......
  • 周六900C++班级2022-11-12-搜索练习
    KnightMoves#include<bits/stdc++.h>usingnamespacestd;intnex[8][2]={{1,-2},{2,-1},{2,1},{1,2},{-1,2},{-2,1},{-2,-1},{-1,-2}};//方向数组intvis[310][3......
  • 关于Redhat-Linux中-compat-sap-c++软件包的说明
    本文OS版本:RedHatEnterpriseLinuxrelease8.6(Ootpa)还是先说一下compat-sap-c++软件包的作用:InordertorunSAPapplicationscompiledwithcertainnewerGCC......
  • C++获取毫秒时间戳的方法
    c++std::chrono::millisecondsTimeUtils::CurrentTimeMillis(){returnstd::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock:......
  • C/C++树和图的应用
    C/C++树和图的应用题目三哈夫曼编码/译码系统(树应用)[问题描述]根据哈夫曼编码算法,编写文件压缩及解压缩软件(有图像界面为最佳,无亦可),可对word文件进行压缩,压缩时要......
  • C++时间计算器
    C++时间计算器六、时间计算器的设计与实现1.采用面向对象的方法实现时间DateTime的模拟和计算,主要属性包括year,month,day,hour,minute,second,wday(该星期中的第几天)......