c - 检测表达式是C中的左值还是右值
问题描述
有什么方法可以确定给定表达式是 C 中的左值还是右值?例如,是否存在is_lvalue
具有以下行为的函数或宏:
int four() {
return 4;
}
int a = 4;
/* Returns true */
is_lvalue(a);
/* Returns false */
is_lvalue(four());
我知道C++ 中存在等效功能,但是在任何 C 标准中都有什么方法可以做到这一点?我对特定于 GCC 的扩展不是特别感兴趣。
感谢您的时间。
解决方案
C 标准没有提供任何方法来检测表达式是否为左值,要么通过根据操作数是否为左值而使某些操作具有不同的值,要么通过生成翻译时诊断消息或错误,具体取决于关于操作数是否为左值。
C 实现当然可以定义提供此功能的扩展。
最接近严格符合 C 的方法是尝试使用 address-of operator 获取表达式的地址&
。如果它的操作数不是左值,这将产生一个诊断消息(并且,在典型的 C 实现中,一个错误)。但是,它也会为作为位域或用 声明的左值生成一条消息register
。如果这些被排除在感兴趣的案例之外,那么它可能有助于在程序翻译期间区分左值和非左值。
推荐阅读
- r - R:使用 terminalExecute() 时出现“调用 capture_console_output 时出错:87”
- java - Centos java定制服务
- entity-framework - 实体框架:映射多对多
- mysql - 具有唯一子集的 MySQL 复合索引
- html - CSS 不与导航栏 html 类对话
- parse-platform - ParseServer:谁在 Cloud Code 中创建临时文件并将其发送到浏览器
- python-3.x - csv writer转义分号python
- excel - 如何在excel中从哪里选择?从数据库返回行
- java - Spring Security 重新创建 HttpSession
- woocommerce - 如何在 WooCommerce 上创建嵌套 url?