康来个程 2022-11-12 23:04 采纳率: 85.7%
浏览 59
已结题

C语言宏定义之类的问题,有帮助必采纳

img

1、(decltype(x)) 为什么要有最外层的这个括号,意义是什么,不加会怎么样?

img

(首先我大概介绍一下我现在对这个宏的理解,为了在不同环境中使用decltype,他自己定义了DECLTYPE,并且从63行开始通过自己实现decltype的功能,decltype在C++中的功能与auto近似,此处具体是什么我不确定)
2、第一个define后面什么都没跟是什么意思 一般define不是像 #define PI 3.14 这种后面会放一个东西跟着的吗(如例子里PI后面跟着3.14)
3、73行等号左右两边的dst为什么要加括号?不加会怎么样?还是说这是什么书写标准吗?
4、65 66 67等行的末尾有一个 \ 符号,这个符号是什么意思,有什么作用。
5、66和72行的两个do while具体实现了什么功能,大致讲解一下怎么实现的。

  • 写回答

4条回答 默认 最新

  • 叶落花枯 2022-11-12 23:41
    关注

    1、宏外面加括号看情况而定,有些情况可以加,也可以不加,需要考虑实际的使用环境,比如定义一个宏

    #define SUM(a, b)    a + b
    #define SUM(a, b)    (a + b)
    // 这里的话肯定是建议加括号的,因为宏在编译的时候会替换到程序中,如果程序里面写 int s = 2 * SUM;
    // 将宏替换过来就是 int s = 2 * a + b;  和  int s = 2 * (a + b); 两种情况,很明显第二种是正确的,所以这种情况的话就必须要加括号
    

    2、define DECLTYPE(x) 只有宏名,没有值,这种语法也是可以的,主要作用用于条件编译,比如常用的手段就是判断某标识符是否被#define定义过。
    3、73行等号左右两边的dst为什么要加括号,这个跟第1点介绍的一样,加了括号可以把 dst 作为一个整体,因为在传递参数进来的时候,dst可能由表达式组成,不加括号有可能造成歧义,所以为了保险起见就加上括号。
    4、末尾有一个 \ 符号是语句换行连接的意思,比如65 ~ 68行的语句本来是写在一行的,像这样子 #define PI 3.14,但是为了可读性、美观,就换行书写了,使用 \ 符号作为换行连接的作用。
    5、65和71行的宏定义实体就是 66和72行的两个do while函数块。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 11月21日
  • 已采纳回答 11月13日
  • 创建了问题 11月12日

悬赏问题

  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 linux驱动,linux应用,多线程