• LDxy
    2021-12-27
    看起来预处理器似乎是一个独立于编程语言的东西,那为何大多数语言不引入预处理器呢?这样想用宏的人可以用宏,不想用宏的人可以不用,不是更能满足程序员吗

    作者回复: 就像你说的一样,其实大部分“现代语言”都不希望将预处理器作为语言自身标准的一部分,这意味着你可以用一些第三方提供的预处理能力来对源码进行编译前的处理。总的来看,大部分人认为预处理器的过度使用通常会导致项目整体结构的混乱,且不利于代码调试。并且宏作为简单的文本替换也不具备语义上的完备性(宏定义时的形式无法决定其具体使用时产生的效果)。因此,从语言的角度来看,大家都更倾向于做编译时优化,尽量让语言本身的特性就可以满足预处理器的使用场景。个人理解哈~

    
    4
  • 骨汤鸡蛋面
    2022-04-20
    老师,请问下为什么c要有头文件呢

    作者回复: 实际上这个问题要从 C 的发展历史上来看,头文件的一个重要目的就是为了能够提供一套对外稳定的接口文档,供其他程序使用已经写好的 C 代码实现,以实现代码重用。当然,不要直接把它与现代语言比如 Go、Python、Rust 等具有包管理器能力的语言相比。

    共 2 条评论
    1
  • 小爷
    2022-03-07
    ##的作用是连接的作用;而#的作用是就是把参数当作字符串代替。
    
    5
  • x
    2022-09-18 来自广东
    #define _STR(x) #x // 将参数x变为字符串 #define _CONN(x,y) x##y // 将x和y参数连接在一起, (1,2)--> 12
    
    4
  • 贺志鹏
    2022-02-24
    #: 将宏的参数转换为字符串,这个操作称为"stringization"。 ##:将两个Token粘合成一个Token。
    
    2
  • linker
    2021-12-27
    ## 用来连接字符串 # 操作符#在字符串中输出实参
    
    1
  • 白花风信子
    2021-12-27
    ##有次在重构自己的小作业用过,有点类似在预处理中预处理的感觉qwq。
    
    1
  • Geek_00a01d
    2022-12-20 来自河南
    思考题 交作业 使用#把宏参数变为一个字符串,用##把两个宏参数贴合在一起.
    
    
  • =
    2022-01-08
    #可以用来进行宏定义与替换、文件包含、条件编译、错误生成、行控制、预定义名称 ##可以用来进行token的联结
    
    