C long的大小是否等于单词的大小

C long的大小是否等于单词的大小,c,linux,word,long-integer,ptrace,C,Linux,Word,Long Integer,Ptrace,您好,我是在Linux(C)下编程的 当我使用ptrace()读取数据时,它返回一个单词。 在所有的例子中,我都看到人们使用long来阅读输入。 一个长单词的大小总是一样的吗? 我知道字是处理器处理数据的自然大小(寄存器大小)。但这是否也适用于不同体系结构上的long OValue_t outputValue; //.su_word is a long outputValue.su_word = ptrace(PTRACE_PEEKDATA,Process.ProcId,address,0

您好,我是在Linux(C)下编程的

当我使用ptrace()读取数据时,它返回一个单词。 在所有的例子中,我都看到人们使用long来阅读输入。 一个长单词的大小总是一样的吗? 我知道字是处理器处理数据的自然大小(寄存器大小)。但这是否也适用于不同体系结构上的long

 OValue_t outputValue;
 //.su_word is a long
 outputValue.su_word = ptrace(PTRACE_PEEKDATA,Process.ProcId,address,0); 
 printf("word  : %ld\n", outputValue.su_word);
 printf("int8 : %i\n", outputValue.su_int8);
编辑:多亏了Krzysztof Kosiński/unwind和Jonathan Leffler的回答,我知道ptrace返回一个long,并且long足够容纳一个单词


示例使用
long
,因为这就是工作原理,原型是:

long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data);
手册页上甚至有一条注释说:

“字”的大小由操作系统变量决定(例如,对于32位Linux,它是32位)

我认为它也被声明为返回
int
,因为
int
应该是平台的“自然”整数大小,我认为在典型情况下,这是该平台的“字大小”


从手册页面上我可以看出,该函数并不认为
long
比“一个单词”更精确。它使用返回值-1来表示错误,但由于该值当然也可以是有效值,因此还需要您检查
errno
示例使用
long
,因为这就是该方法的工作原理,所以原型是:

long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data);
手册页上甚至有一条注释说:

“字”的大小由操作系统变量决定(例如,对于32位Linux,它是32位)

我认为它也被声明为返回
int
,因为
int
应该是平台的“自然”整数大小,我认为在典型情况下,这是该平台的“字大小”


从手册页面上我可以看出,该函数并不认为
long
比“一个单词”更精确。它使用返回值-1来表示错误,但由于该值当然也可以是有效值,因此还需要检查
errno

唯一的规则是long必须至少是单词的大小(int)。除此之外,这取决于机器架构和编译器编写器。您可以合法地使用char=short=int=long=long-long。

唯一的规则是long必须至少是单词(int)的大小。除此之外,这取决于机器架构和编译器编写器。您可以合法地使用char=short=int=long=long-long。

Linux API定义
ptrace
始终返回
long

long ptrace(enum __ptrace_request request, pid_t pid,
            void *addr, void *data);
在Linux上,
long
的大小等于机器字大小(32位机器上为32位,64位机器上为64位,依此类推)。据我所知,在所有具有Linux端口的主要体系结构上都是如此


请注意,这在Windows上是不正确的,因为即使在x64上,
long
也是32位的-但是由于
ptrace
是一个Linux特定的调用,您不必担心它。

Linux API定义
ptrace
总是返回
long

long ptrace(enum __ptrace_request request, pid_t pid,
            void *addr, void *data);
在Linux上,
long
的大小等于机器字大小(32位机器上为32位,64位机器上为64位,依此类推)。据我所知,在所有具有Linux端口的主要体系结构上都是如此


请注意,Windows上的情况并非如此,因为即使在x64上,
long
也是32位的-但由于
ptrace
是一个特定于Linux的调用,因此您不必担心它。

int
没有定义为等于字长,因此建议它应该是可用的最快整数类型。实际上,即使在64位机器上,
int
也是32位的,这意味着它小于字长。
int
没有定义为等于字长,只是建议它应该是最快的可用整数类型。实际上,
int
即使在64位机器上也是32位的,这意味着它比字号小。谢谢,但手册上说的是“在地址读一个字”,那么他们怎么能认为long足够大,可以在不同的平台上存储一个字呢?Jonathan的回答给了我答案,
int
不等于x86-64和大多数其他64位系统上的字大小。谢谢,但手册上说“在地址读一个字”,那么他们怎么能假设long足够大,可以在不同平台上存储一个字呢?Jonathan的回答告诉我,
int
不等于x86-64和大多数其他64位系统上的字长。