当我使用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) 我在本周的代码中发现了以下错误:
import datetime
d = datetime.date(2010,9,24)
if d.isoweekday == 5:
pass
Run Code Online (Sandbox Code Playgroud)
是的,它应该是d.isoweekday()而不是.
我知道,如果我有一个测试用例,我就会得救.将函数与5进行比较并不是很有用.哦,我不是因为这个而责怪Python.
我的问题:是否有可以发现像这样的错误的工具?
我遇到了这个签名的功能.
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) 这是我在使用Valgrind的服务器应用程序中发现的错误.
struct Foo
{
Foo(const std::string& a)
: a_(a_)
{
}
const std::string& a_;
};
Run Code Online (Sandbox Code Playgroud)
与gcc -Wall你没有得到警告.为什么这个合法代码?
我有这段代码:
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) 编写循环并记住之前的循环是很常见的.
我想要一台能为我做这件事的发电机.就像是:
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)
我希望编译器发出如下警告:
"香蕉不是一种颜色."
据我所知,在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) 我见过人们建议使用git-svn进行合并并将其提交回svn.
我正在寻找一个好的一步一步的指南.