gpt4 book ai didi

c++ - "Socket operation on non-socket"错误由于奇怪的语法

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:32:39 27 4
gpt4 key购买 nike

我在调用 connect 时在我的一些网络代码中遇到错误 Socket operation on non-socket 并花了很多时间试图找出导致的原因它。我终于发现是以下代码行导致了问题:

if ((sockfd = socket( ai->ai_family, ai->ai_socktype, ai->ai_protocol) < 0)) {

看到问题了吗?该行应该如下所示:

if ((sockfd = socket( ai->ai_family, ai->ai_socktype, ai->ai_protocol)) < 0) {

我不明白的是为什么第一行不正确的行没有产生警告。换句话说,一般形式不应该:

if ( foo = bar() < baz ) do_something();

编译器看起来很奇怪,尤其是使用 g++ -Wall -Wextra 运行时?

如果不是,它不应该至少显示为 cppcheck 的“糟糕风格”,我也在编译时运行它吗?

最佳答案

实际上,由于双括号(

尝试删除一对,您会收到警告。

#include <iostream>

int foo()
{
return 2;
}

int main(int /*argc*/, char** /*argv*/)
{
int l;

if ((l = foo() < 3)) // Won't generate warning under gcc
{
}

if (l = foo() < 3) // will generate a warning "warning: suggest parentheses around assignment used as truth value"
{
}

return EXIT_SUCCESS;
}

为避免此类烦人的错误/打字错误,我避免在同一语句中分配一个值并对其进行测试。恕我直言,这太容易出错了。

关于c++ - "Socket operation on non-socket"错误由于奇怪的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3060295/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com