草庐IT

source-code-protection

全部标签

c++ - 使用 GCC 查找无法访问的函数 ("dead code")

我正在寻找一种在(非常)大的C++项目中查找静态无法访问的函数的方法。我曾尝试使用doxygen和此处建议的其他静态分析工具,但似乎该项目太复杂了,他们无法处理。最后我决定使用GCC工具(g++、gprof、gcov等)是最安全的选择,尽管我不知道该怎么做。我认为g++优化消除了静态无法访问的函数,但我不确定如何获取它消除的函数的名称。你有什么建议吗? 最佳答案 死代码优化通常由链接器完成——编译器没有概览。但是,编译器可能已经删除了未使用的static函数(因为它们具有内部链接)。因此,您不应该查看GCC选项,而应该查看ld选项。

C++ 嵌套结构继承规则(访问 protected 成员)

这个问题在这里已经有了答案:Protecteddatainparentclassnotavailableinchildclass?(4个答案)关闭5年前。谁能给我解释一下为什么(比如,“为什么语言是这样的?”)下面的代码在B::C::bar的第二行有一个编译错误?classA{public:structD{voidcall_foo(A&a){a.foo();}};protected:voidfoo(){}};classB:publicA{structC:publicA::D{voidbar(A&a,B&b){b.foo();//OKa.foo();//Error.Huh?call_fo

c++ - Visual Studio : MSB3073 error exited with code 1

大家。我正在VisualStudio2013中编译DCMTK3.6.1。我的操作系统是Windows8。我还使用了CMake3.2.3。我已经为ALL_BUILD项目成功编译了x64版本的debug和release。但是,对于INSTALL项目,我无法编译它,因为出现以下错误:Error1errorMSB3073:Thecommand"setlocal"C:\ProgramFiles(x86)\CMake\bin\cmake.exe"-DBUILD_TYPE=Release-Pcmake_install.cmakeif%errorlevel%neq0goto:cmEnd:cmEnden

c++ - 依赖于其他 slib 的静态库是否需要它们的实际 'code' 才能工作?

抱歉问题标题模糊,我只是想确定一些事情。静态库不与其他静态库链接,对吗?所以当我写一个slib:A,它使用另一个:B的功能时,我必须提供的只是B到A的header,而且只有那些,即使A实际上使用了B的功能?是吗?只要使用A的exe:X,有没有指定B.lib作为链接器输入?因此在链接时,链接器采用A.lib,它基本上只知道B的函数在其代码中的某处被调用,并以某种方式从B.lib中填充该信息,使A.lib成为“完整的”,在X与它现在工作的部分链接之前?这些问题背后的动机是摆脱一些链接器警告4006和丢弃的双重定义,我认为这应该可以解决问题,如果这实际上是一种有效的方法的话。

c++ - 使用 Code::Blocks 调试时提供程序参数

我似乎无法弄清楚如何将程序参数添加到代码块调试器的启动命令中。有人知道怎么做吗? 最佳答案 我找到了。项目-->设置程序参数(我一直在查看项目设置,就像visualstudio一样) 关于c++-使用Code::Blocks调试时提供程序参数,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1218014/

[Windows]下visual studio code C#环境的搭建和debugger的配置

通过一中午和一下午的辛勤劳作,谢师傅又因工作不得不学习C++和相关的vscode知识。在此,谢师傅按先后顺序严谨客观的记录下每一步的细节步骤。一、下载MinGW二、环境变量配置 三、启动MinGW并下载相关的库文件下载的库文件,同一存在放\MinGW\bin目录下,注意同时下载gdb,gcc,g++的所有相关文件。否则很容易由于缺失某一方面的库文件导致无法在vscode中充分使用相关功能。i.e.gdb与cppdebugger相关,尤其通过remote插件连接到Linux环境时,没有GDB库文件,无法与CMake一起作用在Linux环境中产生相关的.json文件,从而导致无法再Linux环境中

VS Code使用指南

一.关于Vscode1、Vscode是个啥?VSCode(全称:VisualStudioCode)是一款由微软开发且跨平台的免费源代码编辑器。该软件支持语法高亮、代码自动补全(又称IntelliSense)、代码重构、查看定义功能,并且内置了命令行工具和Git版本控制系统。用户可以更改主题和键盘快捷方式实现个性化设置,也可以通过内置的扩展程序商店安装扩展以拓展软件功能。VSCode使用MonacoEditor作为其底层的代码编辑器。2、Vscode的安装VScode官网地址:https://code.visualstudio.com/VScode下载页面:https://code.visual

c++ - 我怎么说 "noexcept if execution of protected base constructor is noexcept"?

我们遇到过这种情况,想知道解决它的最佳方法templatestructA:T{A(T&&t)noexcept(noexcept(T(std::move(t)))):T(std::move(t)){}};不幸的是编译失败,因为T的移动构造函数是protected,我们只能在*this的构造函数初始化列表中调用它。使这项工作有什么变通办法,或者甚至有标准的方法吗? 最佳答案 您正在寻找noexcept(std::is_nothrow_move_constructible::value):http://en.cppreference.co

c++ - friend 访问 protected 嵌套类

我有以下C++代码:classA{protected:structNested{intx;};};classB:publicA{friendclassC;};classC{voidm1(){B::Nestedn;//orA::Nested}};用g++4.4编译这个片段,无论我在m1中使用B::Nested还是A::Nested都没有区别。Clang接受B::Nested,但如果我接受A::Nested,则不会编译。这是g++还是clang中的错误? 最佳答案 根据标准,GCC是正确的,Clang是错误的。它说在11.2/4Amem

c++ - 技巧 : filling array values using macros (code generation)

AreC++TemplatesjustMacrosindisguise?我正在阅读上述主题,突然想到一个想法:为什么不尝试编写一些可以在我们的实际代码中使用的棘手宏,(不仅仅是作为在现实生活中无用的谜题)?所以首先想到的是:用宏填充数组值:intf(int&i){return++i;}#definee100r5(m20)#definem20m5,m5,m5,m5#definem5r5(e1)#definee1f(i)//avoiding++irighthere,toavoidUB!#definer5(e)e,e,e,e,eintmain(){inti=0;//thisisusedint