函数原型声明c
今天我看到了表单的一个函数原型(为了完整性,添加了一些初始行) 这是L.Peter Deutsch的md5实现。据我所知,在原型中编写函数原型声明c,c,function-prototypes,C,Function Prototypes,今天我看到了表单的一个函数原型(为了完整性,添加了一些初始行) 这是L.Peter Deutsch的md5实现。据我所知,在原型中编写16没有任何意义。那么,为什么会包括在这里呢 这是否只是向程序员表明,无论传递给函数的指针或数组是什么,它都只考虑函数的前16个字节。这到底意味着什么。下面是托管在的实现的链接,实际上,它将衰减到 void md5_finish(md5_state_t*pms,md5_byte_t*digest) 16可能是对用户摘要使用的大小的提示,但从技术上讲,函数将接受参数
16
没有任何意义。那么,为什么会包括在这里呢
这是否只是向程序员表明,无论传递给函数的指针或数组是什么,它都只考虑函数的前16个字节。这到底意味着什么。下面是托管在的实现的链接,实际上,它将衰减到
void md5_finish(md5_state_t*pms,md5_byte_t*digest)代码>
16
可能是对用户摘要使用的大小的提示,但从技术上讲,函数将接受参数中的任何大小,除非函数中有代码检查特定大小。仅适用于编译器void md5_finish(md5_state_t*,md5_byte_t*)
就足够了,我知道这一点,但我只是好奇为什么要写16
。这是某种编程实践吗???@AmandepGautam:一定是某种风格偏好,或者像我所说的那样,作为提示。@AmandepGautam:我看了代码。您可以将更大的数组传递到函数中,这并不重要。函数中的for循环最多只能运行16个字节,因此其余的将被忽略。这就是为什么我觉得这是一种很好的编程实践,表明数组中只需要128位(16字节),其余的就不重要了。我还发现了另一件事,如果您将大小不等于16的数组传递给此函数,编译器将向您发出警告。如果您将大小为16的数组传递给此函数,警告将消失。
typedef unsigned char md5_byte_t; /* 8-bit byte */
typedef unsigned int md5_word_t; /* 32-bit word */
/* Define the state of the MD5 Algorithm. */
typedef struct md5_state_s {
md5_word_t count[2]; /* message length in bits, lsw first */
md5_word_t abcd[4]; /* digest buffer */
md5_byte_t buf[64]; /* accumulate block */
} md5_state_t;
void md5_finish(md5_state_t *pms, md5_byte_t digest[16]);