小编hmi*_*ail的帖子

如何将本地Git分支推送到远程主分支?

我在我的本地仓库中有一个名为develop的分支,我想确保当我将它推到原点时它与origin/master合并.目前,当我将它添加到远程开发分支时.

我怎样才能做到这一点?

git remote-server git-push git-branch

440
推荐指数
2
解决办法
40万
查看次数

"Java Concurrency In Practice"仍然有效吗?

Java并发在实践中是否仍然有效?我想知道本书中描述的想法,概念和实现是否仍然符合最新的Java版本.

我问,因为最新版本是在2006年完成的.

java concurrency java-7 java-8

291
推荐指数
8
解决办法
9万
查看次数

"#define _GNU_SOURCE"意味着什么?

今天我不得不使用这个basename()功能,而man 3 basename(这里)给了我一些奇怪的信息:

笔记

有两个不同版本的basename() - 上面描述的POSIX版本,以及GNU版本,后者可以使用

#define _GNU_SOURCE
#include <string.h>

我想知道这#define _GNU_SOURCE意味着什么:它是否污染了我用GNU相关许可证编写的代码?或者它只是用于告诉编译器类似" 嗯,我知道,这组函数不是POSIX,因此不可移植,但我还是想用它 ".

如果是这样,为什么不给人们不同的标题,而不是必须定义一些模糊的宏来获得一个函数实现或另一个?

有些东西也让我感到困惑:编译器如何知道哪个函数实现与可执行文件链接?它也使用这个#define吗?

有人有一些指示可以给我吗?

c posix gnu

143
推荐指数
4
解决办法
6万
查看次数

结构分配或memcpy?

如果我想在另一个(在C中)复制一个结构,那么pro&con's是什么:

struct1 = struct2;
Run Code Online (Sandbox Code Playgroud)

VS

memcpy(&struct1, &struct2, sizeof(mystruct_t));
Run Code Online (Sandbox Code Playgroud)

它们是等价的吗?性能或内存使用有区别吗?

c struct variable-assignment memcpy

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

修复取消引用类型惩罚指针将破坏严格别名

我正在尝试使用GCC编译特定程序时修复两个警告.警告是:

警告:解除引用类型惩罚指针将破坏严格别名规则[-Wstrict-aliasing]

而这两个罪魁祸首是:

unsigned int received_size = ntohl (*((unsigned int*)dcc->incoming_buf));
Run Code Online (Sandbox Code Playgroud)

*((unsigned int*)dcc->outgoing_buf) = htonl (dcc->file_confirm_offset);
Run Code Online (Sandbox Code Playgroud)

incoming_bufoutgoing_buf定义如下:

char                    incoming_buf[LIBIRC_DCC_BUFFER_SIZE];

char                    outgoing_buf[LIBIRC_DCC_BUFFER_SIZE];
Run Code Online (Sandbox Code Playgroud)

这似乎与我一直在研究的那个警告的其他例子略有不同.我宁愿修复问题而不是禁用严格别名检查.

有很多建议要使用工会 - 这个案例可能是一个合适的工会?

c strict-aliasing type-punning

24
推荐指数
3
解决办法
5万
查看次数

为什么将函数参数标记为volatile

我目前正在阅读PostgreSql代码.以下是缓冲区管理器的摘录:

static void WaitIO(volatile BufferDesc *buf);
static bool StartBufferIO(volatile BufferDesc *buf, bool forInput);
static void TerminateBufferIO(volatile BufferDesc *buf, bool clear_dirty,
Run Code Online (Sandbox Code Playgroud)

我知道volatile关键字通常用于设备驱动程序和嵌入式系统.关键字有解释.

当在类型定义中使用关键字volatile时,它会向编译器指示它应如何处理变量.它主要告诉编译器,由于程序外部的操作或当前执行行,变量的值可能随时发生变化.(来源)

那么为什么某些函数参数被声明为volatile?我不希望DMA改变指针位置.那么这里发生了什么?

c parameters volatile

19
推荐指数
2
解决办法
9017
查看次数

如何从GitHub克隆

我是新用的GitHub.我正在尝试从用户仓库克隆我的第一个文件.我一直收到这个错误:

Permission denied (publickey). fatal: Could not read from remote repository

当我检查以验证公钥是否附加到我的GitHub帐户时,使用此命令:

ssh-add -1

我收到此错误: The agent has no identities.

我也试过这个: ssh-add ~/.ssh/id_rsa

它告诉我: Identity added

我还确保我的笔记本电脑的SSH密钥已添加到我的GitHub帐户中.我错过了哪些步骤?

我扫描了互联网 - 我迷路了.

github cloning

12
推荐指数
1
解决办法
4784
查看次数

具有单个子模块的多个回购

我找了一会儿却找不到答案(也许我不知道该看什么).

我们有一个主库,它是一个自己的存储库(让我们称它为Lib)它包含我们的大多数模块和子模块.我们还说它的大小为2GB ......

现在我们有很多项目,例如:ProjA,ProjB,ProjC,每个项目都使用Lib作为子模块.

ProjA

  • Lib(分支:master,commit#:1)

ProjB

  • Lib(分支:其他,提交#:2)

ProjA

  • Lib(分支:master,commit#:4)

因此,虽然我能够保持每个项目引用正确的库(aka子模块)版本.我现在有3*2GB = 6GB的THE SAME子模块.

有没有办法在保持引用的正确文件/版本控制的同时引用单个子模块?

例如.

ProjA

  • Lib/base_lib.h(v1.0)

  • LIB/file_only_in_this_commit

ProjB

  • Lib/base_lib.h(v1.0)

ProjC

  • Lib/base_lib.h(v1.1)

谢谢!

git git-submodules

8
推荐指数
2
解决办法
1208
查看次数

C 函数是否可以根据参数是否可变而具有双重用途?

我正在使用 GCC 在 C99 上为嵌入式环境进行开发。我制作了一个小型库来处理循环缓冲区和队列。它实现并处理包含缓冲区和所需元数据的基本结构的实例。

struct circbuf_u8_st {
    const uint8_t buffer_num_elems; 
    uint8_t head;
    uint8_t tail;
    uint8_t * buffer;   
};
Run Code Online (Sandbox Code Playgroud)

有时,它struct被用作volatile全局变量,因为它用于生成数据的中断例程和消耗数据的主循环之间的通信。

但有时struct被用作非volatile本地的,例如当主循环的一部分生成稍后在同一主循环上使用的数据时。

struct有时存在有时volatile不存在意味着任何处理该参数的函数都struct需要两个版本,即参数volatile和非volatile参数。这是一个维护问题:在一个版本中所做的任何更改都必须在另一个版本中重复。例如,

void circbufu8_reset(struct circbuf_u8_st *cb);
void circbufu8_v_reset(struct circbuf_u8_st volatile *cbv);
Run Code Online (Sandbox Code Playgroud)

我可以选择volatile所有内容的版本,因为那总是正确的。但这也意味着对volatile我想避免的非案例的悲观。

因此,一个可能的解决方案是声明 aunionvolatile/nonvolatile成员,并声明struct成员具有 that 的类型union

union un_dual_volatile_u8 {
    uint8_t volatile v;
    uint8_t nv;
};
Run Code Online (Sandbox Code Playgroud)

这将有助于摆脱每个函数有两个版本的问题。但是,这真的有帮助吗?这样的函数将(可能)具有什么语义?我的理解是,编译器必须使用 所需的最严格的语义union,因此实际上这只是 …

c parameters volatile unions language-lawyer

5
推荐指数
1
解决办法
213
查看次数

如何使用 git log --format= 提取changeid?

我已经通过了文档

git log --format

但我没有看到使用命令 git log --format 提取 Change-Id 的方法(如下面的 Change-Id 示例所示:Ic8aaa0728a43936cd4c6e1ed590e01ba8f0fbf5b)。

$ git log -1

  commit 29a6bb1a059aef021ac39d342499191278518d1d

  Author: A. U. Thor <author@example.com>

  Date: Thu Aug 20 12:46:50 2009 -0700

      Improve foo widget by attaching a bar.
      We want a bar, because it improves the foo by providing more
      wizbangery to the dowhatimeanery.
      Bug: #42
      Change-Id: Ic8aaa0728a43936cd4c6e1ed590e01ba8f0fbf5b
      Signed-off-by: A. U. Thor <author@example.com>
      CC: R. E. Viewer <reviewer@example.com>
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?提前致谢!

git

5
推荐指数
1
解决办法
1912
查看次数