gpt4 book ai didi

c - 在 TCL 8.4 中,如果 #define NULL 0,TclLib 函数 Tcl_SetHashValue 是否允许值为 NULL?

转载 作者:行者123 更新时间:2023-11-30 15:36:07 24 4
gpt4 key购买 nike

我已阅读 Tcl_SetHashValue [1] 的文档,但我有一个问题。 TclLib 函数 Tcl_SetHashValue 是否允许在 #define NULL 0 的情况下值为 NULL?

换句话说,给定

#define NULL 0

像下面这样的 Tcl_SetHashValue 调用是否有定义的行为?

Tcl_SetHashValue( someHashEntry, NULL );

如果定义了行为,那么行为是什么?例如,如果执行此代码

Tcl_HashTable myhash;
char *key_arg = 0;
Tcl_HashEntry *entry_arg;
ClientData val_arg;
Tcl_HashEntry *pEntry ;
char *pValue ;

Tcl_InitHashTable( &myhash, TCL_STRING_KEYS);

// store data

key_arg = "someKey";
entry_arg = Tcl_CreateHashEntry( &myhash, key_arg, &isEntryNew );
val_arg = NULL ;
Tcl_SetHashValue( entry_arg, val_arg );

// retrieve data

pEntry = Tcl_FindHashEntry( pArgs, criteria );
if (pEntry)
{
pValue = Tcl_GetHashValue( pEntry ) ;
}

上面的代码执行后,pEntry和pValue会包含什么?

1 - http://www.tcl.tk/man/tcl8.4/TclLib/Hash.htm

最佳答案

Tcl_SetHashValue(由于历史原因,它是一个宏)设置的值由宏强制转换为ClientData类型。这又是 void * 的 typedef(除了 C89 之前的系统 (!),它是 char *),并具有 promise Tcl 不会将肮脏的手指伸进去;随后的 Tcl_GetHashValue 将准确返回您提供的值。

在示例代码中,pEntry 将有一个指向有效结构的指针,如果条件不匹配,则为 NULL。如果pEntry 不是NULL,则pValue 将放入该值。这里很可能是NULLNULL 是一个非常适合放入的东西,并且由您的代码来理解它可能意味着什么。

<小时/>

Tcl 的更高版本是相同的,但可能对定义进行了修改。当然,我们放弃了对 C89 之前的支持。 (事实上​​,我们这样做是为了在 8.4 中意外地构建 Tcl 本身,并且没有一个用户提示。我们是保守的,但不是那么保守!)

关于c - 在 TCL 8.4 中,如果 #define NULL 0,TclLib 函数 Tcl_SetHashValue 是否允许值为 NULL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22669260/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com