Tag: C#的

死码识别(C ++)

我有一个很大的遗留C ++项目在Visual Studio 2008下编译。我知道有相当数量的“死”代码,不访问任何地方 – 未调用的方法,没有使用的整个类。 我正在寻找一个能够通过静态分析来识别这个问题的工具。 这个问题: 传统C / C ++项目中的死代码检测build议使用代码覆盖工具。 这不是一个选项,因为testing覆盖率不够高。 它还提到了一个无法访问的代码。 选项gcc。 我想为Visual Studio类似的东西。 我们已经使用链接器的/ OPT:REF选项来删除多余的代码,但是这不会在有用的级别上报告死代码(当与/ VERBOSE一起使用时,有超过100,000行,包括来自库的许多行)。 有没有更好的select,与Visual Studio项目很好地工作?

C ++跨平台库和绑定的最佳文件夹结构

我即将开始使用C ++编写一个跨平台的库。 顺便说一下,我打算实现其他语言(如Python,Java等)的绑定。库需要在主要平台上可用:win32,Linux和Mac OSX。 尽pipe应用程序实际上是一个库,但是一些基本的控制台程序将与其捆绑在一起进行演示和testing。 在我开始在Subversion中存储东西之前,我想提出一个最佳的文件夹结构。 我正在想像这样的事情: /project //Top level folder /bin //Binaries ready for deployment /linux_amd64 //Linux AMD64 platform /debug //Debug build – duplicated in all platforms /release //Release build – duplicated in all platforms /linux_i386 //Linux 32-bit platform /macosx //Mac OS X /win32 //Windows 32-bit platform /cygwin //Windows 32-bit platform compiled with Cygwin […]

新的字符实际上保证alignment的内存类types?

通过new char[sizeof(T)]分配一个缓冲区,保证为Ttypes正确地分配内存,其中T所有成员都有自然的,实现定义的alignment方式(也就是说,你还没有使用alignas关键字修改它们的alignment)。 我在这里看到了几个答案中的这个保证,但是我不完全清楚标准是如何得到这个保证的。 该标准的5.3.4-10给出了基本要求:基本上new char[]必须与max_align_talignment。 我所缺less的是说, alignof(T)将始终是一个有效的队列,最大值为max_align_t 。 我的意思是,这似乎很明显,但一个结构的结果alignment最多是max_align_t ? 甚至连点3.11-3都说可以支持扩展alignment,所以编译器可以自己决定一个类是否是一个过度alignment的types?

使用async / await调用WCF服务的模式

我使用基于任务的操作生成代理。 应该如何正确调用这个服务(之后处理ServiceClient和OperationContext )使用async / await? 我的第一个尝试是: public async Task<HomeInfo> GetHomeInfoAsync(DateTime timestamp) { using (var helper = new ServiceHelper<ServiceClient, ServiceContract>()) { return await helper.Proxy.GetHomeInfoAsync(timestamp); } } 作为ServiceHelper创buildServiceClient和OperationContextScope的类,然后处理它们: try { if (_operationContextScope != null) { _operationContextScope.Dispose(); } if (_serviceClient != null) { if (_serviceClient.State != CommunicationState.Faulted) { _serviceClient.Close(); } else { _serviceClient.Abort(); } } } catch (CommunicationException) […]

ASP.NET MVC体系结构:ViewModel是由构成,inheritance还是重复?

我使用ASP.NET MVC 3和entity framework4.1代码优先。 比方说,我有一个User实体: public class User { public int Id { get; set; } public string Name { get; set; } public string Email { get; set; } public string Password { get; set; } } 在我的UserController编辑时,我想添加一个PasswordConfirmation字段并validationPasswordConfirmation == Password 1.通过构图 我的第一个尝试是: public class EditUserModel { [Required] public User User { get; set; } […]

GCC中树莓派的交叉编译。 从哪儿开始?

TL / DR :我在哪里可以find关于为ARM(gnueabi)平台(旨在运行在Raspberry Pi设备上)构buildGCC 4.7.0交叉编译工具链的更多信息? 我刚刚有了一个全新的树莓派,我非常渴望为它开始编程。 我已经设法安装GCC工具链(我正在使用Arch Linux系统映像)并编译了一些基本程序,所有工作都正常。 我也试过编译Boost库,因为我经常在项目中使用它们,除了编译速度很慢之外,所有内容似乎都能正常工作( ./bootstrap.sh + ./b2 )。 我离开了几个小时,但几乎没有通过前几个源文件。 在我离开之后,我发现由于RAM短缺而中止了构build过程。 所以,我的猜测是,Rasp Pi在编译像Boost这样的大小的东西时是不够的。 所以,交叉编译出现在我的脑海里。 但是,尽pipe在线提供了大量有关ARM交叉编译的信息,但我发现它很混乱。 哪里开始? 我在Raspberry Pi上有一个最新的GCC版本(4.7.0),所以我希望能够用相同的版本进行交叉编译。 我在哪里可以获得ARM的GCC 4.7.0工具链? (我将在x86 CentOS 6.2上编译) 编辑: 我释放了不需要的GPU内存,并在USB驱动器上设置了4GB的交换分区,而构build文件位于NFS共享上。 Boost现在编译速度要快得多,所以可以pipe理。 我仍然想知道如何在x86 PC上build立一个GCC 4.7工具链进行交叉编译,因为我打算做大量的编译工作,我希望它尽可能快。 编辑2: 由于GCC 4.7.0是相对较新的,似乎没有预先build立的交叉编译器(i386-> ARM)。 我可能要自己build一个,这似乎是一个不平凡的任务(我已经尝试失败了)。 有谁知道一个教程要build立一个GCC交叉编译器,希望为最近的版本之一? 我已经尝试了这个很棒的shell脚本 (这对于构build一个相同的脚本编译器非常有效),并且我已经成功构build了binutils和GCC的先决条件,但是GCC构build仍然失败,出现了许多隐藏的错误。 我真的迷失在这里,所以我非常感谢你的帮助。 GCC在Raspberry Pi上configuration了 –prefix=/usr –libdir=/usr/lib –libexecdir=/usr/lib –mandir=/usr/share/man –infodir=/usr/share/info –with-bugurl=https://bugs.archlinux.org/ –enable-languages=c,c++,fortran,lto,objc,obj-c++ –enable-shared –enable-threads=posix –with-system-zlib […]

DateTime可以在64位环境中破解吗?

在C#中,只要一个variables的值最多为native int (即在32位运行时环境中为4个字节,在64位中为8个字节), native int其设置为primefaces。 在包含所有引用types和大多数内置值types( byte , short , int , long等)的64位环境中。 设置一个更大的值不是primefaces的,只会更新内存的一部分,会造成撕裂。 DateTime是一个只包含一个包含其所有数据( Ticks和DateTimeKind )的ulong字段的结构, ulong本身在64位环境中是primefaces的。 这是否意味着DateTime也是primefaces的? 或者下面的代码是否会导致在某个点上撕裂? static DateTime _value; static void Main() { for (int i = 0; i < 10; i++) { new Thread(_ => { var random = new Random(); while (true) { _value = new DateTime((long)random.Next() << 30 […]

何时访问指向“死”对象的指针有效?

首先,为了澄清,我不是在引用无效指针的引用! 考虑以下两个例子。 例1 typedef struct { int *p; } T; T a = { malloc(sizeof(int) }; free(ap); // ap is now indeterminate? T b = a; // Access through a non-character type? 例2 void foo(int *p) {} int *p = malloc(sizeof(int)); free(p); // p is now indeterminate? foo(p); // Access through a non-character type? 题 […]

为什么C-forkbombs不能像bash那样工作?

如果我运行古典bash forkbomb: :(){ :&:&};: 我的系统在几秒钟后挂起 。 我试图在C中写一个forkbomb,这里是代码: #include <unistd.h> int main( ) { while(1) { fork(); } return 0; } 当我运行它时,系统的响应速度会变慢,但是我可以按^C来杀死这个进程(即使在几分钟之后)。 上面的代码与我发布的原始bash forkbomb不同:它更像是: 🙁 ) { while true do : done } (我没有testing,不知道是否会挂起系统)。 所以我也试图实现原来的版本; 这里的代码是: #include <unistd.h> inline void colon( const char *path ) { pid_t pid = fork( ); if( pid == 0 ) […]

为什么我们不能自动推导出返回types?

最近我正在做一个朋友,他希望把C ++做成更多的Haskell-y,我们想要一个基本如此的函数: auto sum(auto a, auto b) { return a + b; } 显然,我不能使用自动作为参数types,所以我改变了这个: template<class A, class B> auto sum(A a, B b) { return a + b; } 但是这也行不通。 我们最终意识到我们需要这个: template<class A, class B> auto sum(A a, B b) -> decltype(a + b) { return a + b; } 所以我的问题是,这有什么意义? 不是decltype只是重复信息,因为编译器可以看看return语句吗? 我认为,也许这是必要的,所以我们可以只包含一个头文件: template<class A, […]