代码之家  ›  专栏  ›  技术社区  ›  bogatyrjov

什么是C中的“-1L”?

c
  •  19
  • bogatyrjov  · 技术社区  · 14 年前

    在C中“-1L”、“1L”等是什么意思?

    例如,在 ftell 上面写着参考

    ... 如果发生错误,则返回-1L。。。

    如果发生错误,为什么不返回NULL?

    6 回复  |  直到 11 年前
        1
  •  39
  •   Mark Elliot    14 年前

    这个 L long 类型,所以 -1L 是一个 长的 设为负数,然后 1L 长的 设置为正数。

    ftell 不只是回来 NULL 无效的 长的 被退回。请注意 0 0个 是的有效值 回来。

    捕捉这种情况需要检查非负值:

    long size;
    FILE *pFile;
    
    ...
    
    size = ftell(pFile);
    if(size > -1L){
        // size is a valid value
    }else{
        // error occurred
    }
    
        2
  •  6
  •   Clifford    11 年前

    长整型 ,应用于文本的L后缀强制其类型为 而不是普通的 内景

    NULL是完全不正确的,因为它是表示 指针 不是一个 整数

    对于所有意图和目的,您通常可以简单地将错误返回视为-1,在大多数情况下,由于隐式强制转换规则,L后缀对于正确操作并不重要

        3
  •  4
  •   gdc    14 年前

    它的意思是将值返回为long,而不是int。

        4
  •  2
  •   Nader Shirazie    14 年前

        5
  •  2
  •   Svisstack    14 年前

    -1 形成于 long int 是一个 -1L . 为什么不简单 NULL 无效的 在这个函数中是一个正常的结果,也不能对错误进行sygnalize。为什么? 在这个函数中是正常结果吗?因为 NULL == 0 ftell 返回流中的位置,当您在流的开始处时,函数返回 0 这是一个正常的结果而不是错误,那么如果您将这个函数与 若要检查错误,则当您处于流中的起始位置时将得到错误。

        6
  •  1
  •   Gilbert    11 年前

    今天编辑意味着更多的细节仍然需要。

    我最喜欢的考试方式与分数不同,这是一种偏好而不是善的问题。

    if ( err >= 0L )
        success
    else
        error

    一般来说,我不喜欢找明确的-1。如果将来出现-2,我的代码将 可能的 不休息。

    内景 值返回0表示成功,返回-1表示错误。大多数。

    当C语言被发明的时候,事情并不是一帆风顺的,甚至在今天的小系统上也不是。原始K&R C并不保证空值为零,这在具有虚拟内存的CPU上通常是如此。在小的“真实内存”系统上,零可能是一个有效的地址,因此需要将“无效”地址移动到其他一些依赖于操作系统的位置。这将真正被CPU接受,只是不是在正常的情况下生成的。可能是一个很高的内存地址。我甚至可以看到一个名为 extern const long NULL[1]; 允许空值成为此未使用数组的地址。

    那时候你看到很多 if ( ptr != NULL ) 陈述而不是 if ( ptr )