小编Edd*_*onk的帖子

gcov报告的析构函数中的分支是什么?

当我使用gcov来测量C++代码的测试覆盖率时,它会在析构函数中报告分支.

struct Foo
{
    virtual ~Foo()
    {
    }
};

int main (int argc, char* argv[])
{
    Foo f;
}
Run Code Online (Sandbox Code Playgroud)

当我运行gcov并启用分支概率(-b)时,我得到以下输出.

$ gcov /home/epronk/src/lcov-1.9/example/example.gcda -o /home/epronk/src/lcov-1.9/example -b
File 'example.cpp'
Lines executed:100.00% of 6
Branches executed:100.00% of 2
Taken at least once:50.00% of 2
Calls executed:40.00% of 5
example.cpp:creating 'example.cpp.gcov'
Run Code Online (Sandbox Code Playgroud)

困扰我的部分是"至少采取一次:50%的2".

生成的.gcov文件提供了更多详细信息.

$ cat example.cpp.gcov | c++filt
        -:    0:Source:example.cpp
        -:    0:Graph:/home/epronk/src/lcov-1.9/example/example.gcno
        -:    0:Data:/home/epronk/src/lcov-1.9/example/example.gcda
        -:    0:Runs:1
        -:    0:Programs:1
        -:    1:struct Foo
function Foo::Foo() called 1 returned 100% blocks executed 100%
        1:    2:{
function …
Run Code Online (Sandbox Code Playgroud)

c++ gcc code-coverage gcov

39
推荐指数
2
解决办法
9577
查看次数

我什么时候应该在我的代码中添加注释?

  • 当我写作的时候?
  • 我完成一部分后(Single class/function/if-elses)?
  • 在我完成整个工作之后?

comments coding-style

25
推荐指数
4
解决办法
2568
查看次数

Unix中的作业和进程有什么区别?

Unix中的作业进程有什么区别?你能举个例子吗?

unix

16
推荐指数
3
解决办法
2万
查看次数

是否有可以发现像这样的错误的工具?

我在本周的代码中发现了以下错误:

import datetime

d = datetime.date(2010,9,24)
if d.isoweekday == 5:
    pass
Run Code Online (Sandbox Code Playgroud)

是的,它应该是d.isoweekday()而不是.

我知道,如果我有一个测试用例,我就会得救.将函数与5进行比较并不是很有用.哦,我不是因为这个而责怪Python.

我的问题:是否有可以发现像这样的错误的工具?

python

16
推荐指数
1
解决办法
413
查看次数

通过引用传递数组参数

我遇到了这个签名的功能.

void foo(char (&x)[5])
{
}
Run Code Online (Sandbox Code Playgroud)

这是通过引用传递固定大小的char数组的语法.

它需要围绕括号的事实让&x我感到不同寻常.

它可能是C++ 03标准的一部分.

这个表格叫什么,有人能指出对标准的引用吗?

c ++ decl还不是朋友:

$ c++decl 
Type `help' or `?' for help
c++decl> explain void foo(char (&x)[5])
syntax error
Run Code Online (Sandbox Code Playgroud)

c++ arrays pass-by-reference

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

初始化参考成员本身合法吗?

这是我在使用Valgrind的服务器应用程序中发现的错误.

struct Foo
{
    Foo(const std::string& a)
        : a_(a_)
    {
    }
    const std::string& a_;
};
Run Code Online (Sandbox Code Playgroud)

与gcc -Wall你没有得到警告.为什么这个合法代码?

c++

14
推荐指数
1
解决办法
310
查看次数

如何从简单函数中提取名称?

我有这段代码:

import inspect
import ast

def func(foo):
    return foo.bar - foo.baz

s = inspect.getsource(func)
xx = ast.parse(s)

class VisitCalls(ast.NodeVisitor):
    def visit_Name(self, what):
        if what.id == 'foo':
            print ast.dump(what.ctx)

VisitCalls().visit(xx)
Run Code Online (Sandbox Code Playgroud)

从函数'func'我想提取:

['foo.bar', 'foo.baz']
Run Code Online (Sandbox Code Playgroud)

或类似的东西:

(('foo', 'bar'), ('foo', 'baz))
Run Code Online (Sandbox Code Playgroud)

编辑

一些背景解释为什么我认为我需要这样做

我想将一个普通的python函数的代码转换为电子表格公式.

所以我需要转换:

foo.bar - foo.baz
Run Code Online (Sandbox Code Playgroud)

至:

=A1-B1
Run Code Online (Sandbox Code Playgroud)

示例电子表格http://img441.imageshack.us/img441/1451/84516405.png

**再次编辑*

到目前为止我得到了什么.

以下程序输出:

('A1', 5)
('B1', 3)
('C1', '= A1 - B1')
Run Code Online (Sandbox Code Playgroud)

代码:

import ast, inspect
import codegen # by Armin Ronacher
from collections import OrderedDict

class SpreadSheetFormulaTransformer(ast.NodeTransformer):
    def __init__(self, sym):
        self.sym = …
Run Code Online (Sandbox Code Playgroud)

python abstract-syntax-tree codegen

10
推荐指数
1
解决办法
1474
查看次数

减去列表中的当前项和上一项

编写循环并记住之前的循环是很常见的.

我想要一台能为我做这件事的发电机.就像是:

import operator

def foo(it):
    it = iter(it)
    f = it.next()
    for s in it:
        yield f, s
        f = s
Run Code Online (Sandbox Code Playgroud)

现在减去成对.

L = [0, 3, 4, 10, 2, 3]

print list(foo(L))
print [x[1] - x[0] for x in foo(L)]
print map(lambda x: -operator.sub(*x), foo(L)) # SAME
Run Code Online (Sandbox Code Playgroud)

输出:

[(0, 3), (3, 4), (4, 10), (10, 2), (2, 3)]
[3, 1, 6, -8, 1]
[3, 1, 6, -8, 1]
Run Code Online (Sandbox Code Playgroud)
  • 这项行动有什么好名字?
  • 写这个更好的方法是什么?
  • 是否有内置函数可以执行类似的操作?
  • 尝试使用"地图"并没有简化它.什么

python

10
推荐指数
1
解决办法
8404
查看次数

如果枚举标签与类型不匹配,编译器是否应该发出警告?

我希望编译器发出如下警告:

"香蕉不是一种颜色."

据我所知,在switch语句的上下文中,标签被提升为int,编译器对0感到满意,并不关心它是"Green"还是"Banana".

我希望 - GCC的转换可以解决这个问题.

enum Color
  {
    Green = 0
  };

enum Fruit
  {
    Banana = 0
  };

int main()
{
  Color c = Green;
  switch (c)
    {
    case Banana:
      std::cerr << "Banana" << std::endl;
      break;
    }
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++

10
推荐指数
2
解决办法
281
查看次数

如何使用git-svn将更改从trunk更改为svn中的分支?

我见过人们建议使用git-svn进行合并并将其提交回svn.

我正在寻找一个好的一步一步的指南.

  • 是值得的麻烦还是我应该使用svn来做到这一点.
  • 人们会看到我使用过git,是否有关于svn合并的元数据?
  • 我可以选择中继和1分支的克隆吗?
  • 我需要一个完整的克隆,还是可以从分支的位置导入它?

git git-svn

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