小编Tim*_*eld的帖子

为什么在C++中声明枚举时使用typedef?

我多年没有写过任何C++,现在我想回到它.然后我跑过去想着放弃:

typedef enum TokenType
{
    blah1   = 0x00000000,
    blah2   = 0X01000000,
    blah3   = 0X02000000
} TokenType;
Run Code Online (Sandbox Code Playgroud)

这是什么?为什么typedef这里使用关键字?为什么名称TokenType在此声明中出现两次?语义与此有何不同:

enum TokenType
{
    blah1 = 0x00000000,
    blah2=0x01000000,
    blah3=0x02000000
};
Run Code Online (Sandbox Code Playgroud)

c++ enums typedef

174
推荐指数
7
解决办法
18万
查看次数

二叉搜索树的定义中是否允许重复键?

我正在尝试找到二叉搜索树的定义,并且我一直在寻找不同的定义.

有人说,对于任何给定的子树,左子键小于或等于根.

有人说,对于任何给定的子树,右子键大于或等于根.

我的旧大学数据结构书中说"每个元素都有一个键,没有两个元素具有相同的键."

是否存在bst的通用定义?特别是关于如何处理具有相同密钥的多个实例的树.

编辑:也许我不清楚,我看到的定义是

1)左<= root <右

2)左<root <=右

3)左<root <右,这样就不存在重复的密钥.

computer-science binary-tree data-structures

128
推荐指数
7
解决办法
9万
查看次数

为什么由于类型弱而在C中实现垃圾收集"不可能"?

一个相当聪明的人告诉我你不能在C中实现垃圾收集,因为它的类型很弱.基本的想法似乎是C给你太多的自由.他提到了没有类型检查的铸造指针......

我并没有真正理解这个想法.有人可以给我一个解释,也可能是一个代码示例,说明为什么这不起作用.

注意:显然C是关于速度的,为什么要添加垃圾收集?我真的很好奇.

c garbage-collection memory-management

21
推荐指数
3
解决办法
5113
查看次数

封闭中的副作用,它们仍然是纯粹的功能吗?

作为函数式编程的新手,我耗费了大量的精力,想知道"这是做事的功能性方法吗?"显然,递归与迭代非常简单,很明显递归是功能性的做事方式.但是以闭包为例.我已经了解了使用Lisp的闭包,我理解闭包是一个函数和一个环境的组合(听起来很像状态和行为).例如:

(let ((x 1))
           (defun doubleX()
              (setf x (* x 2))))
Run Code Online (Sandbox Code Playgroud)

这里我们有一个函数doubleX,它已经在x变量的环境中定义.我们可以将此函数传递给其他函数,然后调用它,它仍然可以引用x变量.该函数可以继续引用该变量,即使它是在已定义变量的环境之外调用的.我看过闭包的许多例子都是这样的.其中setf用于更改词法变量的值.这让我很困惑,因为:

1.)我认为setf是邪恶的.主要是因为它会引起副作用,显然它们也是邪恶的.

2.)这真的"功能性"吗?似乎只是一种保持全球状态的方式,我认为功能语言是无状态的.

也许我只是不明白闭包.有人可以帮我吗?

lisp programming-languages functional-programming

14
推荐指数
2
解决办法
1470
查看次数

将损坏的代码提交到存储库以进行备份

我只是和另一位开发人员(比我更高级)谈话,并试图说服他们我们应该通过Cruise Control实现持续集成.他告诉我,这不起作用,因为他提交的代码不会一直编译到存储库,以便进行备份.而通知我们失败的自动化构建只是噪音.

垃圾回收回购对我来说听起来很糟糕.但我不知所措,不知道该说些什么.有什么选择?在不添加大量无意义修订的情况下,在另一台计算机上备份代码的最佳做法是什么?

顺便说一句,我们的版本控制系统是SVN,可能不会很快改变.

svn version-control cruisecontrol

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

使用V8的Javascript中的文件系统I/O.

我的印象是,现在javascript可以用作浏览器之外的适当的通用编程语言,使用独立的解释器,如V8或SpiderMonkey.所以我继续安装V8.

但是,我想要做的第一件事是在文件中读取并进行一些处理.我环顾四周,并没有找到使用JS/V8做这件事的明显方法.

我的直觉告诉我,V8中的C++文件i/o函数必须有一个包装器函数.这已经完成了,还是我需要自己实现的?或许我错过了重点!?

感谢您的任何帮助,您可以提供!

javascript file-io v8

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

我应该把我的常数大都化吗?

你们有什么感想?常量应该大写吗?或者这是一个古老的做法?所以...

const int MY_CONSTANT = 5;
Run Code Online (Sandbox Code Playgroud)

const int myConstant = 5;
Run Code Online (Sandbox Code Playgroud)

language-agnostic coding-style constants

8
推荐指数
3
解决办法
5107
查看次数

在C中设置以毫秒为单位的警报

我目前有一些C代码使用sigaction将处理程序与SIGALRM信号相关联.然后我做闹钟(TIME_OUT_IN_SECONDS).问题是,我需要毫秒,而不是秒,报警需要一个整数.如何设置信号以毫秒为单位触发?

c signals

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

为什么我有时会听到"词汇变量"一词?

我已经看过几次"词汇变量"一词,主​​要是在闭包的情况下.Paul Graham在他关于Lisp的书中使用了这个术语,指的是使用let表达式定义的变量.

我理解词法作用域是静态作用域的另一个名称.词法变量只是一个在程序单元的引用环境中可见的变量吗?

我希望在这个假日季节能用这个词给我的朋友和家人留下深刻印象,有人可以帮帮我吗?

language-agnostic computer-science terminology lexical-scope

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

在Linux内核模块中使用timer_list会导致系统崩溃

我正在编写一个使用动态计时器的内核(2.6.28)模块.我正在使用timer_list结构,如下所示:

struct timer_list our_timer;
init_timer(&our_timer);
our_timer.function = handleFlowTimer;
our_timer.expires = jiffies + 2000;
our_timer.data = 0;
add_timer(&our_timer);

void handleFlowTimer(unsigned long data)
{
    //do nothing
}
Run Code Online (Sandbox Code Playgroud)

这可以正常工作约2秒,直到计时器到期.然后系统崩溃了.我也尝试过这样的结果:

struct timer_list our_timer = TIMER_INITIALIZER(handleFlowTimer, 0, 0);
mod_timer(&our_timer, jiffies + 2000);
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激!

c linux-kernel

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