在limits.h中的LONG_BIT

时间:2013-04-04 17:05:06

标签: c

我正在为我的学习编写一个程序,因此我必须描述一些战争以获得某些数据类型的限制。 当我写这篇文章时:

#include <limits.h>
#include <stdio.h>

int main(void)
{
    printf("%d\n", CHAR_BIT);
    printf("%d\n", LONG_BIT);
    return 0;
}

但是它给了我以下错误:

a.c: In function ‘main’:
a.c:7:17: error: ‘LONG_BIT’ undeclared (first use in this function)
  printf("%d\n", LONG_BIT);
                 ^
a.c:7:17: note: each undeclared identifier is reported only once for each function it appears in

即使gcc -E也给了我这个

int main(void)
{
 printf("%d\n", 8);
 printf("%d\n", LONG_BIT);
 return 0;
}

但是limit.h中的grep并没有给我答案。但是bits / xopen_lim.h有这个声明,它应该包含在

__USE_XOPEN
宣布

,但即使手动声明也不会给我一个结果。

问题出在哪里?在联机帮助页中看到有一个LONG_BIT宏,但是gcc说没有。

gcc版本4.8.0(GCC) OS arch

[编辑] 对于那些说LONG_BIT不是c标准的人,请输入

man 0 limits.h

并搜索LONG_BIT。对我来说,数字限制下有两个条目,因此我认为存在LONG_BIT。 不,包括bits / xopen_lim.h不是一个真正的选项,因为它应该包含在limits.h中而不是手动

3 个答案:

答案 0 :(得分:2)

LONG_BIT不是标准 C中的内容。

对于便携式方法,请执行以下操作:

CHAR_BIT * sizeof(long)

答案 1 :(得分:1)

您的问题是您不应该定义__USE_XOPEN。如果您查看/usr/include/features.h,您会看到它明确地取消定义它,然后根据功能测试宏重新定义这些宏。您可能希望定义_XOPEN_SOURCE,例如:

gcc -D_XOPEN_SOURCE=700 -o longbit longbit.c

来自features.h

  

_XOPEN_SOURCE包含POSIX和XPG的东西。如果设置为500                           需要单个Unix一致性,为600                           第六次修订,第七次修订为700   _XOPEN_SOURCE_EXTENDED XPG的东西和X / Open Unix   扩展。

另外,wrt直接包括xopen_lim.h:

/*
 * Never include this file directly; use <limits.h> instead.
 */

所以,我不建议直接加入它。另请参阅man feature_test_macros

答案 2 :(得分:0)

http://www.cplusplus.com/reference/climits/

LONG_BIT

中没有limits.h这样的内容
相关问题