【问题标题】:How shall pre ANSI-C "0 pointers" be written in ANSI C?pre ANSI-C“0 指针”应该如何用 ANSI C 编写?
【发布时间】:2020-07-08 18:49:44
【问题描述】:

我正在阅读一些旧代码,我正在寻找这样的结构:

Symbol *lookup(s)
    char *s;
{
    Symbol *sp;
    for(sp=symlist; sp!= (Symbol *)0; sp = sp->next)
        if(strcmp(sp->name, s) == 0)
            return sp;
    return 0;
}

我了解可以通过以下方式在 ANSI C 中指定参数:

Symbol *lookup(char *s) {
   ...
}

但我想知道如何处理 0 指针:

(Symbol *) 0

【问题讨论】:

    标签: pointers c89 ansi-c


    【解决方案1】:

    sp != (Symbol *)0 在 ANSI/ISO C 中仍然完全有效。任何值为 0 的整数常量表达式都可以用作空指针常量(C17 6.3.2.3 (3)),并且可以转换为任何指针类型,导致该类型的空指针。所以只要sp 不是空指针,这只是重复循环。

    将其重写为sp != NULL 可能更传统一些,但没有必要。如果你喜欢简洁,你也可以简单地写

    for(sp=symlist; sp; sp = sp->next)
    

    【讨论】:

      【解决方案2】:

      这只是一种指定类型空指针的方法,而不是 stdlib.h 中更常见的具有 void* 类型的 NULL,与 K&R C 中指定的方式参数没有任何关系。

      【讨论】:

        猜你喜欢
        • 2013-04-13
        • 2012-08-09
        • 1970-01-01
        • 2011-09-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-06
        • 1970-01-01
        相关资源
        最近更新 更多