当前位置: 首页 > news >正文

凡科快图网站长沙电商网站

凡科快图网站,长沙电商网站,我朋友是做卖网站的,山东济南网网站建设文章目录 ## 运算符的基本概念可变参数宏与 ## 的应用可变参数宏简介## 处理可变参数的两种情况可变参数列表为空可变参数列表不为空 示例代码验证 在 C 和 C 编程里,宏定义是个很有用的工具。今天咱们就来聊聊 ## 这个预处理器连接运算符在宏定义中的作用&#xff…

文章目录

    • `##` 运算符的基本概念
    • 可变参数宏与 `##` 的应用
      • 可变参数宏简介
      • `##` 处理可变参数的两种情况
        • 可变参数列表为空
        • 可变参数列表不为空
    • 示例代码验证


在 C 和 C++ 编程里,宏定义是个很有用的工具。今天咱们就来聊聊 ## 这个预处理器连接运算符在宏定义中的作用,特别是在可变参数宏里的应用。

## 运算符的基本概念

## 是预处理器的连接运算符,也叫“令牌粘贴”运算符。它能把两个预处理令牌连在一起,变成一个新的预处理令牌。在宏定义里,它主要用于处理可变参数。这部分内容在 C 语言标准文档里有明确说明,它是 C99 及以后标准支持的特性。

可变参数宏与 ## 的应用

可变参数宏简介

C99 引入了可变参数宏的概念。在宏定义里,... 表示可变参数部分,__VA_ARGS__ 会被替换成实际传递的可变参数列表。比如下面这个 LOG 宏:

#define LOG(level, format, ...) { \if (level >= LDEFAULT) { \time_t t = time(NULL);\ struct tm *lt = localtime(&t);\ char time_tmp[32] = {0}; \strftime(time_tmp, 31, "%m-%d %T", lt);\ fprintf(stdout, "[%s][%s:%d] " format "\n", time_tmp, __FILE__, __LINE__, ##__VA_ARGS__); \} \
}

## 处理可变参数的两种情况

可变参数列表为空

当调用 LOG 宏时没传递可变参数,像 LOG(LINF, "No variable arguments");## 能消除 __VA_ARGS__ 前面的逗号。要是没有 ##,宏展开后会有多余逗号,导致编译出错。有了 ##,可变参数为空时逗号会被移除,保证代码正确。

可变参数列表不为空

如果传递了可变参数,比如 LOG(LINF, "The sum is %d", a + b);##__VA_ARGS__ 会被替换成实际的可变参数 a + b,宏展开后就能正确把参数传给 fprintf 函数。

示例代码验证

下面是个简单示例,展示 LOG 宏的使用和 ## 的作用:

#include <stdio.h>
#include <time.h>#define LDBG 0
#define LINF 1
#define LERR 2
#define LDEFAULT LINF#define LOG(level, format, ...) { \if (level >= LDEFAULT) { \time_t t = time(NULL);\ struct tm *lt = localtime(&t); \char time_tmp[32] = {0}; \strftime(time_tmp, 31, "%m-%d %T", lt);\ fprintf(stdout, "[%s][%s:%d] " format "\n", time_tmp, __FILE__, __LINE__, ##__VA_ARGS__); \} \
}int main() {int a = 10, b = 20;LOG(LINF, "Starting the program");LOG(LINF, "The sum of %d and %d is %d", a, b, a + b);return 0;
}

在这个示例中,第一个 LOG 调用没传可变参数,第二个传了。因为用了 ##,两种情况都能正确编译运行。

通过以上分析,我们能清楚看到 ## 运算符在处理可变参数宏时的重要性,它保证了代码的灵活性和正确性。希望大家在编程中能灵活运用这个特性。

http://www.yayakq.cn/news/208980/

相关文章:

  • 广州网站优化推广方案安图县建设局网站
  • 免费网站导航建设php 网站 教程
  • 东莞市品牌网站建设平台装修队伍做网站
  • 东莞网站建设网络公司公司房子装修设计软件
  • 网站建设包含图文设计住房城乡建设厅网站
  • 网站建设技术及服务承诺成都手机网站建设哪
  • php做网站导购模板如何给网站做301跳转
  • 大型网站建设招商做玻璃瓶的网站
  • 太和网站建设山西响应式网站制作
  • 做销售网站需要多少钱互联网服务平台登录
  • 运城建设网站学网站美工设计
  • 网站开发安全文档怎样做网站的后台
  • 专业的餐饮加盟网站建设施工企业环境管理体系文件
  • 成都网站设计 常凡云网站建设准备工作总结
  • 自主网站建站微商城小程序哪个好
  • 企业网站建设服务公司怎样做汽车之家视频网站
  • 推广网站制作怎么做网站有收录但是没排名
  • 设计师必去的网站互联网保险的发展现状
  • 网站不允许上传文件网站开发h5技术
  • 老年人做网站全国有名的网站建设公司
  • 外贸建站的公司响应式企业官网
  • 东莞樟木头网站制作程序员外包兼职平台
  • 班组安全建设 网站郑州seo排名优化公司
  • 网站推广制作株洲网站设计
  • 企业网站建设和网络营销的关系uc浏览网页版进入
  • 昆明市做网站公司石家庄网站建设服务
  • 南阳网站制作哪家好logo在线设计图片
  • 永州公司网站建设北京seo站内优化
  • 如何用ai给网站做logo做网站不给提供ftp
  • 网站svg使用无锡seo报价