我正在为我的学习编写一个程序,因此我必须描述一些战争以获得某些数据类型的限制。 当我写这篇文章时:
#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中而不是手动
答案 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)