【发布时间】:2014-08-17 12:07:27
【问题描述】:
在 C 中定义长整数的首选方法是什么?是否存在兼容性问题?
long int ln;
或
long ln;
【问题讨论】:
-
注意:C11 规范始终使用
long int,如long int ftell(FILE *stream);。在我自己的偏好(在long)之前,我会遵守该组的编码标准(如果存在)。
标签: c int long-integer
在 C 中定义长整数的首选方法是什么?是否存在兼容性问题?
long int ln;
或
long ln;
【问题讨论】:
long int,如long int ftell(FILE *stream);。在我自己的偏好(在long)之前,我会遵守该组的编码标准(如果存在)。
标签: c int long-integer
如果您工作的公司有编码约定,并且其中包含对此的要求,您应该遵守约定。但是,如果没有关于如何声明 long int 的规则,请选择您认为最好的。
我建议您使用stdint 中定义的类型。例如,long int 可能等同于 int32_t。在很多情况下,了解您正在使用的变量的位宽很有用。
【讨论】:
你忘了还有signed long和signed long int:)
根据 C 标准
5 每个以逗号分隔的多重集表示相同的类型, 除了位域,它是由实现定义的 说明符 int 指定与 signed int 相同的类型或相同的类型 作为无符号整数
因此,仅对于位域,int 和 signed int 之间存在差异
考虑到你可能会这样写,例如以下方式
const signed const long const int ln;
相当于
const long ln;
【讨论】:
long 和 long int 没有区别。你可以使用你想要的。我宁愿用 long int 来记住你做了什么。
【讨论】:
除了@unwind 的回答,还有long double,当然还有long long int。 Long 可能在实现的其他罕见角落中有用(long char?),但它始终是一个修饰符,但如果没有什么可修改的,则假定 int。
C 的语法传统上在很多地方都隐含了int:
myfunction (i, j)
{
return 6 * i + j;
}
在 1979 年 V6 Unix 上的实现中,myfunction() 将被解释为返回类型 int,除非进一步声明,否则这两个参数也将被假定为 int:
float myfunction (i, j)
long i; float j;
{
return 6 * i + j;
}
【讨论】:
没有“兼容性问题”,没有。它们是完全相同的类型,long 是类型名称 long int 的缩写形式。就像short 是short int 的缩写一样。
这当然是非常主观的,但我认为大多数 C 程序员只是使用long。
【讨论】: