【问题标题】:function prototype declaration c函数原型声明 c
【发布时间】:2012-07-15 14:52:14
【问题描述】:

今天看到了一个表单的函数原型(为了完整,添加了几行开头)

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]);

这取自 L. Peter Deutsch 的 md5 实现。据我所知,在原型中写16 没有任何意义。那么为什么会出现在这里

这是否只是向程序员表明,无论你传递给函数的指针或数组,它只会考虑它的前 16 个字节。它在这里实际上意味着什么。这是github上托管的实现的链接

【问题讨论】:

    标签: c function-prototypes


    【解决方案1】:

    实际上,它会衰减到

    void md5_finish(md5_state_t *pms, md5_byte_t *digest);

    16 可能是对用户摘要使用的大小的提示,但从技术上讲,该函数将接受参数中的任何大小,除非函数中有代码检查特定大小。

    【讨论】:

    • 对于编译器来说,只有void md5_finish(md5_state_t *, md5_byte_t*); 就足够了,我知道但只是好奇为什么要写16。这是某种编程实践吗??
    • @AmanDeepGautam:一定是某种风格偏好,或者就像我说的暗示。
    • @AmanDeepGautam:我查看了代码。您可以将更大的数组传递给函数,这无关紧要。函数中的 for 循环最多只能运行 16 个字节,因此其余部分将被忽略。
    • 没错。这就是为什么我觉得表明你只需要在你的数组中有 128 位(16 字节)而其余的无关紧要是一种很好的编程习惯。还有一件事我发现如果你传递一个大小不等于 16 的数组,编译器会给你警告,如果你将一个大小为 16 的数组传递给这个函数,警告就会消失。
    猜你喜欢
    • 2011-08-07
    • 2021-03-17
    • 1970-01-01
    • 2011-02-04
    • 1970-01-01
    • 2011-12-16
    • 1970-01-01
    • 2016-05-23
    • 2021-10-17
    相关资源
    最近更新 更多