首页
社区
课程
招聘
[结贴][求助]一个超级奇怪的C语言语法,求解
发表于: 2013-9-30 19:20 8003

[结贴][求助]一个超级奇怪的C语言语法,求解

2013-9-30 19:20
8003
我在《加密与解密》中看到一个MD5的代码,其中的C语言代码语法超级奇怪,如下
首先说明:这种逆天的语在《加密与解密》提供的代码中是可以编译成功的!但是我自己用这种逆天的语法,没有成功。
/* MD5 initialization. Begins an MD5 operation, writing a new context.
 */
[COLOR="Red"]void MD5Init (context)[/COLOR]
[COLOR="red"]MD5_CTX *context;                                        /* context */[/COLOR]
{
  context->count[0] = context->count[1] = 0;
  /* Load magic initialization constants.
*/
  context->state[0] = 0x67452301;
  context->state[1] = 0xefcdab89;
  context->state[2] = 0x98badcfe;
  context->state[3] = 0x10325476;
}

完整代码见附件,这种逆天的C语言代码,谁能给我解释一下

这个代码的文件目录为:“X:\加密解密第三版光盘\chap06\6.1 单向散列算法\6.1.1 MD5算法”

原来是C语言中特有的语法,谭浩强的《C程序设计》或“K&R C”我确实没有看过,第一次了解到,原来C语言还有对我来说这么逆天的语法~~
谢谢大家的解答

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 0
支持
分享
最新回复 (12)
雪    币: 80
活跃值: (109)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
我又抢了一个沙发。

请问楼主《C程序设计》(谭浩强)看了没?
void MD5Init (context)
MD5_CTX *context;                                             /* context */

/* 以上代码等价于 void MD5Init( MD5_CTX *context ) */

{
    context->count[0] = context->count[1] = 0;
    /*
    上一行代码等价于:
          context->count[0] = 0;
          context->count[1] = 0;
       */
       context->state[0] = 0x67452301;   
     context->state[1] = 0xefcdab89;   
     context->state[2] = 0x98badcfe;
     context->state[3] = 0x10325476;
}
2013-9-30 19:32
0
雪    币: 2242
活跃值: (488)
能力值: ( LV9,RANK:200 )
在线值:
发帖
回帖
粉丝
3
搜索一下“K&R C”, 你就知道
2013-9-30 19:34
0
雪    币: 1088
活跃值: (30)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
有啥奇怪的...........
硬是没看出来
2013-9-30 19:37
0
雪    币: 244
活跃值: (454)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
能有精华3的楼主肯定是在刻意卖萌。
2013-9-30 19:45
0
雪    币: 4560
活跃值: (1002)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
没看出奇怪点,撸过了
2013-9-30 19:47
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
根据3楼的找到了这个http://www.cppblog.com/mymsdn/archive/2008/08/14/ansi-c-and-kr-c-different-of-function-style.html
2013-9-30 19:59
0
雪    币: 293
活跃值: (287)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
呼呼,第一次看到奴,C语言,C++不支持。
你把你自己写的代码文件后缀名改成 *.C 就可以编译通过,.CPP不行
2013-9-30 20:41
0
雪    币: 22
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
没看出奇怪点,撸过了
2013-9-30 20:50
0
雪    币: 114
活跃值: (72)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
10
哈哈,当年也是用老谭的书,硬是不记得这种风格的定义了。。。各位好记性
2013-9-30 20:52
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
LZ让我开眼界了,我在linux环境写了个代码帮你试了一下:
#include <stdio.h>

struct test {
        char ch;
        int  i;
};

void fun(t)
struct test *t;   // 这里 void fun(struct test *t),它是将t的类型"拿到"括号外面声明了
{
        t->ch = 'b';
        t->i = 2;
}

int main()
{
        struct test t = { 'a', 1 };

        printf("t.ch: %c, t.i: %d\n", t.ch, t.i);
        fun(&t);
        printf("t.ch: %c, t.i: %d\n", t.ch, t.i);

        return 0;
}
2013-9-30 21:02
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
晕, 前面都已经有答案了。
2013-9-30 21:05
0
雪    币: 37
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
很好,看了上面的回复,不管楼主是真不会还是假不会,这个贴子都很好.
楼主对细节的注意力让我佩服
2013-10-6 08:53
0
游客
登录 | 注册 方可回帖
返回
//