小编Pra*_*tic的帖子

lldbinit 中的进程句柄

我想要以下命令初始化我的 .lldbinit。

process handle SIGPROF -n false -p true -s false
Run Code Online (Sandbox Code Playgroud)

问题是lldb在启动并且还没有进程时不会运行这个命令。

错误:在命令 #1 后中止读取命令:'进程句柄 SIGPROF -n false -p true -s false' 失败,错误:没有当前目标;在您拥有有效的目标和进程之前,无法处理信号。

我如何告诉 lldb 在它有进程时应用这个命令?

linux signals lldb

9
推荐指数
1
解决办法
581
查看次数

为什么2to3将mydict.keys()更改为list(mydict.keys())?

我正在查看包含此更改的2to3的输出:

-            for file_prefix in output.keys():
+            for file_prefix in list(output.keys()):
Run Code Online (Sandbox Code Playgroud)

哪里output是字典.

这种变化有什么意义?为什么2to3这样做?

这种变化如何使代码Python 3兼容?

python python-2to3 python-3.x

9
推荐指数
1
解决办法
1115
查看次数

无法内联函数定义之前的调用?

海湾合作委员会的文件包含以下内容:

当函数既是内联函数又是静态函数时,如果对函数的所有调用都集成到调用者中,并且从不使用函数的地址,则永远不会引用函数自己的汇编代码.在这种情况下,除非指定选项-fkeep-inline-functions,否则GCC实际上不会为函数输出汇编代码.由于各种原因,某些调用无法集成(特别是,无法集成函数定义之前的调用,也无法在定义中进行递归调用).

这总是听起来很荒谬 - 为什么现代编译器会那么愚蠢?经过快速测试后,看起来确实不真实.

测试代码:

static inline int foo();

int bar() {
    return foo();
}

int foo() {
    return 42;
}
Run Code Online (Sandbox Code Playgroud)

在Linux上使用gcc-4.9.2的结果包含bar()但没有的代码foo().你可以看到foo()已经集成:

bar:
.LFB0:
    .cfi_startproc
    movl    $42, %eax
    ret
    .cfi_endproc
Run Code Online (Sandbox Code Playgroud)

如果我编译为C++,结果是相同的,除了名称修改.

相反,文档,尽管foo()在呼叫之后被定义bar(),foo()已经完全融入bar().

我是否误解了文档或是不正确的?对于一些更复杂的案例,这可能是正确的吗?

我不知道"集成"和"内联"之间是否存在技术上的区别,但我怀疑"集成"用于区分关键字inline,它只是指函数内联(因此标题).

这个问题被标记为C和C++,因为gcc文档的这一部分属于"C语言系列",我希望这两种语言的答案是相同的.

c c++ gcc g++ inlining

9
推荐指数
1
解决办法
296
查看次数

使用基数排序实现std :: sort的重载是否合法?

对于适用的数据类型,良好的基数排序可以std::sort大大超过比较排序,但通常实施为内部排序.是否有理由不使用基数排序来实现std::sort?基数排序并不足以实现,std::sort因为std::sort只需要那些类型可比较,但对于比较和基于基数的排序产生相同答案的类型(例如int),这似乎是低悬的水果,而不被删除.

std::sort在适当的情况下使用基数排序的重载实现是否合法?有什么关于这个要求从std::sort根本上阻止了这个吗?

编辑:我应该更清楚一点.我问的是,执行标准库是否合法.我不是要问一个标准库实现的用户在std命名空间中放置任何东西.我知道这样做是非法的,除非在特定情况下.

c++ sorting standard-library language-lawyer

9
推荐指数
1
解决办法
180
查看次数

是否有一个原因是带有空捕获列表的lambdas不能默认构造?

C++的lambdas在需要函数对象的模板中使用会很方便,但是它们不能默认构造.

正如在这个问题中所讨论的,这对于具有非空捕获列表的lambda来说是有意义的.

按类型实例化C++ lambda

Kerrek解释说:

代码没有意义.想象一下你有一个像这样的捕捉lambda:

{
    int n = 0;
    auto t = [&n](int a) -> int { return n += a; };
}
Run Code Online (Sandbox Code Playgroud)

默认构造一个decltype(t)类型的对象可能意味着什么?

带有空捕获列表的lambdas怎么样?有没有理由对默认构造没有意义?还有什么比"标准如此说"还要多吗?

c++ lambda c++11

9
推荐指数
1
解决办法
286
查看次数

为什么gcc生成memmove而不是memcpy来复制std :: vector <>?

使用gcc 5.3,以下示例中的两个函数都会生成一个调用memmove.生成一个memcpy?是不合适的?

#include <vector>

int blackhole(const std::vector<int>&);

int copy_vec1(const std::vector<int>& v1) {
    const std::vector<int> v2{v1.begin(), v1.end()};
    return blackhole(v2);
}

int copy_vec2(const std::vector<int>& v1) {
    const auto v2 = v1;
    return blackhole(v2);
}
Run Code Online (Sandbox Code Playgroud)

关于Godbolt的例子.

c++ performance assembly gcc c++14

9
推荐指数
3
解决办法
1703
查看次数

函数返回void的无序函数评估

在C和C++中是否有一种方法可以使返回void的函数以未指定的顺序进行求值?

我知道函数参数是以未指定的顺序计算的,因此对于不返回void的函数,可以使用它来以未指定的顺序评估这些函数:

#include <stdio.h>

int hi(void) {
    puts("hi");
    return 0;
}

int bye(void) {
    puts("bye");
    return 0;
}

int moo(void) {
    puts("moo");
    return 0;
}

void dummy(int a, int b, int c) {}

int main(void) {
    dummy(hi(), bye(), moo());
}
Run Code Online (Sandbox Code Playgroud)

由符合编译器编译合法的C和C++代码可以打印hi,byemoo以任何顺序.这不是未定义的行为(鼻子恶魔不会有效),只有不止一个但不是无限的有效输出,并且兼容的编译器甚至不需要确定它产生什么.

没有虚拟返回值,有没有办法做到这一点?

澄清: 这是一个关于C和C++的抽象问题.一个更好的原始措辞可能是有任何上下文,其中函数评估顺序未指定返回void的函数?我不是想解决一个具体的问题.

c c++ language-lawyer

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

-fprofile-use和-fauto-profile有什么区别?

-fprofile-use和之间有什么区别-fauto-profile

以下是文档所说的内容:

https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#Optimize-Options

-fprofile使用

-fprofile使用=路径

启用配置文件反馈导向的优化,以及通常只有可用的配置文件反馈才能获利的以下优化:[...]

如果指定了path,GCC将查看查找概要文件反馈数据文件的路径.见-fprofile-dir.

在那之下

-fauto瞩目

-fauto轮廓=路径

启用基于采样的反馈导向优化,以及通常仅通过可用的配置文件反馈获利的以下优化:[...]

path是包含AutoFDO配置文件信息的文件的名称.如果省略,则默认为当前目录中的fbdata.afdo.

([...]for 中的优化列表-fauto-profile更长.)

c++ gcc

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

在R大声嘈杂的错误

R似乎对错误处理采取了非常自由放任的立场,行为类似于大多数shell脚本语言.最重要的是,R倾向于在终端上打印大量无害的文本.这使得错误很容易被忽视.不止一次,我有一个脚本在早期产生错误,然后愉快地传播NaNs通过其余的计算.只有经过一段时间的奇怪结果后,我才意识到发生了什么.

经验丰富的R用户如何处理这个问题?有没有办法让错误致命或至少更明显?

r

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

使用unison同步包含git存储库的目录

我想在两台机器上同步一个包含我的dotfiles的git repo的目录.两台机器都将对repo中的文件进行更改.通常我使用unison来同步目录,但在这种情况下,.git即使目录内容表面上相同,目录中的文件也会发散.当它看到这一点时,Unison会举手并退出.

$ unison dotfiles
changed  <-?-> changed    .git/FETCH_HEAD
changed  <-?-> changed    .git/ORIG_HEAD
changed  <-?-> changed    .git/index
changed  <-?-> changed    .git/logs/HEAD
changed  <-?-> changed    .git/logs/refs/heads/master
changed  <-?-> changed    .git/logs/refs/remotes/origin/master
Run Code Online (Sandbox Code Playgroud)

这里的逐字节同步不起作用,因为即使使用相同的文件和git状态,内部git文件也可能不同.我该如何同步这些目录?同步后,两台计算机上的所有非git文件和git状态应该相同.通过git状态我的意思是提交历史记录和暂存,但不一定是每个内部git文件的每个字节(例如.gitignore,.git).我不太了解git,我会详细了解我的意思,但如果不清楚只是评论.

我不想将任何git提交作为同步的一部分.我认为版本控制和同步是两个独立的问题.

将git和sync这些单词放入google会产生描述如何克隆repo的结果.需要明确的是,上面"同步"的使用都不是指git动作.

git unison

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