小编cga*_*art的帖子

Boost :: asio这种奇怪的编码风格是什么?

我即将在我的boost asio socket通信中调试一些东西.并在asio库中找到了这段代码(在boost/asio/impl/write.hpp第169行(boost 1.47)中找到):

  switch (start)
  {
    case 1:
    buffers_.prepare(this->check_for_completion(ec, total_transferred_));
    for (;;)
    {
      stream_.async_write_some(buffers_,
          BOOST_ASIO_MOVE_CAST(write_op)(*this));
      return; 
    default:
      total_transferred_ += bytes_transferred;
      buffers_.consume(bytes_transferred);
      buffers_.prepare(this->check_for_completion(ec, total_transferred_));
      if ((!ec && bytes_transferred == 0)
          || buffers_.begin() == buffers_.end())
        break;
    }

    handler_(ec, static_cast<const std::size_t&>(total_transferred_));
  }
Run Code Online (Sandbox Code Playgroud)

我已经有很多年的C/C++开发经验,但在我的生活中从来没有见过这种奇怪的实现.在那里,switch语句的默认:标签在for循环中.

如果我理解这一点,那么switch语句是"误用"而不是goto,对(对于start!= 1,goto default :)的情况?它实际上是一个有效的C/C++标准吗?如果我举例说明会发生什么

for(int i=0; i < 10; i++)
Run Code Online (Sandbox Code Playgroud)

而不是原始代码中的for循环.如果跳转执行到默认值,"i"是否会被定义:标签?当然,我可能会在这里使用调试器,但这对我来说似乎很可疑,我认为这可能会为不同的编译器产生不同的行为.

c++ boost boost-asio

8
推荐指数
1
解决办法
576
查看次数

Git子模块乱七八糟:如何与不熟悉git的开发人员一起使用git子模块?

我对使用git的子模块功能感到非常沮丧.要么我仍然没有做对,要么就是因为我没想到这一点.以下项目情况给出:

Project
  | .git
  | projsrc
  | source (submodule)
  | proj.sln
Run Code Online (Sandbox Code Playgroud)

在此方案中,指向包含所有项目中的公共源数据的另一个存储库.在源代码下发生了很多开发,也在projsrc下.遗憾的是,Project指向源子模块的一些提交,而不是它的实际HEAD.这是通常的git行为,据我所知.

我已经发现了

git submodule update
Run Code Online (Sandbox Code Playgroud)

只需获取与主项目一起提交的子模块版本.但是,我真的希望始终与子模块开发保持同步,但是没有任何真正的线索如何做到这一点.因此我的问题是:

是否可以将项目附加到子模块的HEAD,不管这是否会破坏项目的编译.我只是不想总是进入子模块目录并执行git pull.因为我认为我可以放弃在子模块目录中完成的更改,因为这很简单地附加到提交而不是真正的任何分支左右.

请考虑以下限制:

  • 我们小组的开发人员并不熟悉所有VCS.我们之前习惯使用非常庞大的svn存储库,根本没有任何外部repo功能.
  • 我们正在开发Windows
  • click'n'forget解决方案是最好的,因为大多数项目成员都使用命令行界面而感到害怕:)

windows git git-submodules

7
推荐指数
1
解决办法
7634
查看次数

标签 统计

boost ×1

boost-asio ×1

c++ ×1

git ×1

git-submodules ×1

windows ×1