小编shi*_*ing的帖子

如何为C++代码生成调用图

我正在尝试生成调用图,用它来找出所有可能执行特定函数的执行路径(这样我就不必手动计算出所有路径,因为有很多路径可以导致这个功能).例如:

path 1: A -> B -> C -> D  
path 2: A -> B -> X -> Y -> D  
path 3: A -> G -> M -> N -> O -> P -> S -> D  
...  
path n: ...
Run Code Online (Sandbox Code Playgroud)

我已经尝试过Codeviz和Doxygen,不知怎的,两个结果只显示目标函数的被调用者D.在我的例子中,D是一个类的成员函数,其对象将被包装在智能指针中.客户端将始终通过工厂获取智能指针对象以调用D.

有谁知道如何实现这一目标?

c++ static-analysis call-graph

79
推荐指数
4
解决办法
5万
查看次数

学习和跨平台开发(C++)

我正在编写一个小型的C++程序,用于娱乐和扩展我的C++技能.由于其范围相对较小,我还计划通过使该程序支持Windows和Linux来尝试跨平台开发.

我认为我的C++熟练程度介于休闲和中级之间:OO,一些模板和设计模式,之前使用STL并试图更详细地研究它......但是,在编写这个小程序时,我发现我越深入挖掘C++,我就越痛苦,特别是当我开始理解和处理不同平台/供应商实现之间的差异时.

使用像Qt,ACE,Boost这样的跨平台框架似乎有助于加快开发速度,从而使生活更轻松,但我担心这是否会超出我的目的.如果有任何进行C++跨平台开发的"最佳实践",有人可以给出一些建议吗?谢谢.

c++ cross-platform

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

SVN用户学习ClearCase的快捷方式

到目前为止,我一直在使用SVN,现在需要从开发人员的角度快速获取ClearCase.这有什么好的资源吗?谢谢.

- 加上 -
SV的概念/术语(即存储库,工作副本,主干,分支,标签,结账,提交,更新,还原)与CC之间是否有映射?根据初步阅读,我提出以下内容.

存储库=> VOB?
工作副本=>快照视图?
Trunk => ??
分支=>整合流?发展流?
标签=>标签?基线?
从repo签出作为工作副本=>从VOB签出作为快照视图?
从工作副本提交到repo =>从快照视图签入到VOB?
更新=> Rebase?
恢复=> ??
?? =>交付

AFAIK CC有自己独特的概念,因此我无法告诉最近的地图.

clearcase

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

主要之前和之后的异常处理

是否可以在这些场景中处理异常:

  1. 在进入main()之前从构造函数抛出
  2. 离开main()后从析构函数抛出

c++ program-entry-point exception-handling

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

使用单例模式的简单C++记录器

由于使用Singleton模式实现记录器的泛滥示例,我刚刚为我的程序编写了一个简单的C++记录器.但是,由于已知着名的双重检查锁定方法不再是线程安全的,我想知道我是否应该:

1)忘记在这种情况下使用Singleton模式?

2)即使不安全,仍继续使用双重检查锁定?

3)对每次访问公共接口使用昂贵的纯同步锁定方法?

有什么建议?

c++ logging singleton design-patterns

6
推荐指数
1
解决办法
7497
查看次数

关于GCC链接器的问题

道歉,因为目前我没有环境来试验并自己解决以下问题:

1)假设我有四个库文件:libmylib_super.alibmylib_super.so,mylib_dumb.amylib_dumb.so.在指定要链接的库时,以下方法之间有何区别:

A)-l:libmylib_super.a
B)-llibmylib_super
C)-lmylib_super
D)-lmylib_dumb

2)-static来自手册页的定义:

在支持动态链接的系统上,这会阻止与共享库的链接.在其他系统上,此选项无效.

此链接器选项是否与问题#1有关?或者......他们会互相干扰吗?

谢谢.

---编辑2009-12-28 ---

我只是通过链接到Boost date_time库来获得我的环境并尝试一下.说我有三个库文件:libboost_date_time-mt-d.a,libboost_date_time-mt-d.so.1.41.0,libboost_date_time-mt-d.so -> libboost_date_time-mt-d.so.1.41.0(符号链接).

A.1)-l:libboost_date_time-mt-d.a==>链接OK,即使没有库文件,二进制文件仍可正常工作.
A.2)-l:libboost_date_time-mt-d.a带有-static==> 链接错误 /usr/bin/ld: cannot find -lm

C.1)-lboost_date_time-mt-d==>链接OK,二进制有效但需要共享库文件.
C.2)-lboost_date_time-mt-d-static==> 链接错误 /usr/bin/ld: cannot find -lm

关于A.2和C.2中的错误的任何想法?

此外,在C.1中运行程序时,它似乎搜索共享库文件的名称,libboost_date_time-mt-d.so.1.41.0但不是libboost_date_time-mt-d.so.如果程序在没有库的确切版本的系统上运行,那会不会很不方便?在使用共享库时,处理该版本的实用方法是什么?

linker gcc ld libraries

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

与非C++代码的链接

我确实使用了从互联网上找到的这种链接片段,它确实有用.现在我想对这个主题有更多的了解,即如果我的C++代码将由非C++代码导出/链接,我应该注意什么.有人能指出我对此有用的任何资源吗?谢谢.

c++

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