- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
为了简单描述问题,请看下面的代码:
int main()
{
int a=123;
({if (a) a=0;});
return 0;
}
我从 [-Wsequence-point] 收到此警告
Line 4: warning: operation on 'a' may be undefined
我的 g++ 版本是 4.4.5
如果谁能解释这个简单的问题,我将不胜感激。
顺便说一句,您可以在 this 中的 #7 中找到我的原始程序和原始问题中文网站(非必须)
UPD1:
虽然将代码改成 ({if(a) a=0; a;})
可以避免警告,但我认识到问题的真正原因可能不是 复合语句中的最后一项应该是一个后跟分号的表达式
。
因为纪录片还说如果你在大括号中最后使用某种其他类型的语句,则构造的类型为void,因此实际上没有值
。
一个例子可以展示它:
int main()
{
int a=123, b;
({;});
({if (a) b=0;});
return 0;
}
并且这段代码没有警告!所以我认为真正的原因是序列点。
请帮忙!
UPD2:
很抱歉@AndyProwl 不接受他在 UPD1 之前接受的答案。按照他的建议,我可能会问一个新问题(UPD1 是一个与原始问题不同的新问题)。我会再次接受他的回答,因为无论如何它肯定会避免警告。:)
如果我决定提出新问题,我会更新此问题以添加链接。
最佳答案
根据 C++ 语法,表达式(也许除了 lambda 表达式,但那是另一回事)不能包含语句 - 包括 block 语句。因此,我会说你的代码格式不正确,如果 GCC 编译它,这意味着这是一个(奇怪的)编译器扩展。
您应该查阅编译器的引用资料,以确定它被赋予(或没有被赋予,正如错误消息所暗示的那样)给它的语义。
编辑:
As pointed out by Shafik Yaghmour in the comments ,这似乎是一个 GNU 扩展。根据documentation ,这个“语句表达式”的值应该是 block 中最后一条语句的值,应该是一个表达式语句:
The last thing in the compound statement should be an expression followed by a semicolon; the value of this subexpression serves as the value of the entire construct. (If you use some other kind of statement last within the braces, the construct has type void, and thus effectively no value.)
由于您示例中的 block 不包含作为最后一条语句的表达式语句,因此 GCC 不知道如何评估该“语句表达式”(不要与“表达式语句”混淆 - 这应该是最后出现在语句表达式)。
因此,为了防止 GCC 提示,您应该执行以下操作:
({if (a) a=0; a;});
// ^^
但老实说,我不明白为什么在 C++ 中需要这个东西。
关于c++ - 为什么我在 C++ 中的语句表达式中得到 "operation may be undefined"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16838884/
我只是有一个更琐碎的问题。 为什么undefined == undefined 返回true,而undefined >= undefined 为false? undefined 等于 undefine
用PHP 7.2编写套接字服务器。根据Firefox 60中的“网络”选项卡,服务器的一些HTTP响应的第一行随机变为undefined undefined undefined。因此,我尝试记录套接字
在 JavaScript 中这是真的: undefined == undefined 但这是错误的: undefined <= undefined 起初我以为<=运算符包含第一个,但我猜它试图将其转换
在回答这个问题 (Difference between [Object, Object] and Array(2)) 时,我在 JavaScript 数组中遇到了一些我以前不知道的东西(具有讽刺意味的
来自https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/of , Note: thi
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
当我添加 到我的 PrimeFaces Mobile 页面,然后我在服务器日志中收到以下警告 WARNING: JSF1064: Unable to find or serve resource, u
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我是一名优秀的程序员,十分优秀!