variadic-functions - 什么是 ... 语法上的可变参数?
问题描述
C/C++ 编译器认为...
是什么?需要明确的是,我不认为这是一个重复的问题,因为其他stdarg
问题是关于“什么是可变参数列表/它们如何工作?” 那不是我的问题。
我查看了 MSVC 的包含文件,发现了 stdarg.h、vcruntime.h 等,但还没有让自己满意。
编译器是否将其...
视为运算符?链接器符号?宏?它不能是标识符,因为标识符中.
不允许使用该源字符 ( )。
如果我不得不猜测,我会说这类似于使用__attribute__
宏inline
或register
编译器“提示”来禁止在调用具有多个参数的函数时出现警告/错误。
来自 ISO9899:
6.5.2.2 函数调用
约束
6 函数原型声明器中的省略号符号导致参数类型转换在最后一个声明的参数之后停止。默认参数提升是在尾随参数上执行的。
我想并不是所有的事情都需要完全确定,但我很好奇那里是否有更多的技术信息。
解决方案
一个punctuator
。
ISO 9899:
6.4.6 标点符号
语义
2 标点符号是具有独立句法和语义意义的符号。根据上下文,它可以指定要执行的操作(这反过来可能会产生一个值或函数指示符、产生副作用或它们的某种组合)在这种情况下,它被称为运算符(其他形式的运算符也在某些情况下存在)。操作数是操作员作用的实体。
推荐阅读
- ruby-on-rails - 保存记录时忽略Rails Form Timezone
- mysql - 删除具有两个或多个条件的重复标题的行
- javascript - 用户值在 jQuery 的警报功能之前是准确的,但 saveorupdate 函数将空值保留在 db 表中
- mariadb - mariadb 中的 Fetch Check 约束定义
- sql - 在asp.net中通过用户输入减去Sql总和值
- java - How to calculate String Buffer capacity?
- c - Visual C 中除以零异常处理
- networking - 连接“网络不可达”VPS Centos
- api - Retrofit 2 获取数据到 Listview Viewholder 模式,java.util.ArrayList.size 上的空指针异常
- opennms - OpenNMS - 监控 VPN 隧道流量