3

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

#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;
}

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

__USE_XOPEN

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

那么问题出在哪里?看一下手册页说有一个 LONG_BIT 宏,但 gcc 说没有。

gcc 版本 4.8.0 (GCC) 操作系统架构

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

man 0 limits.h

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

4

3 回答 3

2

LONG_BIT不是标准C中的东西。

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

CHAR_BIT * sizeof(long)
于 2013-04-04T17:10:48.813 回答
2

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

gcc -D_XOPEN_SOURCE=700 -o longbit longbit.c

来自features.h

_XOPEN_SOURCE 包括 POSIX 和 XPG 的东西。如果需要 Single Unix 一致性,则设置为 500,第六版设置为 600,第七版设置为 700。
_XOPEN_SOURCE_EXTENDED XPG 事物和 X/Open Unix 扩展。

另外,直接写包括xopen_lim.h

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

所以,我不建议直接包含它。另请参阅man feature_test_macrosinfo '(libc)Feature Test Macros'

于 2013-04-04T17:24:02.697 回答
0

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

没有这样LONG_BIT的东西limits.h

于 2013-04-04T17:13:32.660 回答