小编Tom*_*m's的帖子

执行/忽略代码的Perl方式(如C中的assert)

我在Perl编程(V 5.20.2在Debian 8)真正的初学者,我期待实现"调试"与Perl的执行时间上的开销时,我并不需要调试的方法.

在C中,我们可以使用assert-Dgcc选项(通常,您可以通过使用与您自己的定义constante相同的方式来执行自己的断言MY_DEBUG).

好吧,首先想法只是设置一个全局变量debug并再次测试它,但是当我不想处于调试模式时它会产生一堆无用的测试.

有像断言Carp :: Assert这样的CPAN模块,但似乎即使我不想调试也会有if测试.

是否有一种Perl方式可以根据"某些东西"停用代码部分?

额外的问题:我想制作一个具有相同功能的Perl模块,所以如果有办法说"启用/禁用调试",那么use MyModule,我将是一个快乐的Perl开发人员.

perl

3
推荐指数
1
解决办法
141
查看次数

删除"静态"关键字对函数的影响

最近,我学会了" 回溯 "功能的存在.此函数允许在某些情况下检索在没有调试信息的情况下编译的ELF运行程序的callstack.

它对我来说是完美的(我不能在生产程序中插入调试符号),但是对于"回溯"工作,有(大致)两个条件:

  • 告诉链接器添加额外信息(通过传递-rdynamic选项).
  • 将所有"静态"函数转换为"非静态"函数.

我担心的是,如果我满足这两个条件,我的程序将会变慢(因为编译器无法优化非静态函数,因为他优化了静态函数?).据我所知,使用-rdynamic添加额外信息不会影响程序的性能:它只是给ELF二进制文件增加了一点重量.

所以这是我的问题:

当所有静态函数变为非静态函数时,运行性能的影响是什么?

c

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

如何使用指向另一个字段的字段初始化结构?

鉴于此结构:

typedef struct test {
  char field1[20];
  char *field2;
} test_s
Run Code Online (Sandbox Code Playgroud)

如何使用指定的初始化程序初始化这种结构,知道我希望field2指向field1?

test_s test = {.field1[0] = '\0', .field2 = .field1};
Run Code Online (Sandbox Code Playgroud)

不起作用.

c struct initialization

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

如何在 Visual Studio 2017 上将 zlib 编译成 DLL?

我很难尝试做一些我认为非常简单的事情(我一定不是第一个想做的人)。我在 Windows 7 上使用 Visual Studio 2017 来做一些 C 代码,我需要为 zip 充气/放气。

我搜索了一下,我找到了zlib。这似乎正是我搜索的内容:免费、酷版权、无专利,并在其他项目中广泛使用和测试。

所以,我开始下载最新版本(1.2.11 的 zip),然后我开始尝试“简单地”获取 DLL。

但是,文档指出为了编译“zlib1.dll”,我必须使用“./contrib/vstudio/vc..”,“..”是正确的 Visual Studio。但是我有 Visual Studio 2017,只有“vc9”到“vc14”,“vc14”是 Visual Studio 2015。

文档说我必须使用 Microsoft Visual C++ 2015,事实上,当我用 vs2017 强制打开时,我有完整性错误。

所以我尝试安装 MVC++ 2015,但它说我无法安装它,因为我已经安装了一些东西(VS2017)。

这么基本的东西真的没有办法实现,还是有我不知道的知识?

c zlib visual-studio-2017

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

标签 统计

c ×3

initialization ×1

perl ×1

struct ×1

visual-studio-2017 ×1

zlib ×1