- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已阅读 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会包含什么?
最佳答案
由Tcl_SetHashValue
(由于历史原因,它是一个宏)设置的值由宏强制转换为ClientData
类型。这又是 void *
的 typedef(除了 C89 之前的系统 (!),它是 char *
),并具有 promise Tcl 不会将肮脏的手指伸进去;随后的 Tcl_GetHashValue
将准确返回您提供的值。
在示例代码中,pEntry
将有一个指向有效结构的指针,如果条件不匹配,则为 NULL
。如果pEntry
不是NULL
,则pValue
将放入该值。这里很可能是NULL
; NULL
是一个非常适合放入的东西,并且由您的代码来理解它可能意味着什么。
Tcl 的更高版本是相同的,但可能对定义进行了修改。当然,我们放弃了对 C89 之前的支持。 (事实上,我们这样做是为了在 8.4 中意外地构建 Tcl 本身,并且没有一个用户提示。我们是保守的,但不是那么保守!)
关于c - 在 TCL 8.4 中,如果 #define NULL 0,TclLib 函数 Tcl_SetHashValue 是否允许值为 NULL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22669260/
我已阅读 Tcl_SetHashValue [1] 的文档,但我有一个问题。 TclLib 函数 Tcl_SetHashValue 是否允许在 #define NULL 0 的情况下值为 NULL?
我是一名优秀的程序员,十分优秀!