c语言中entern int x y,关于extern和int main()的结构有关问题

关于extern和int main()的结构问题

本帖最后由 hashcat 于 2015-09-20 12:34:50 编辑

这是c实现md5加密的代码,报错部分是两处extern,其实也就是两处extern需要改动,但是试了半天,没搞懂要怎么改...

#include 

#include 

#define MD5_ROTL(a,b) (MD5_tmp=(a),((MD5_tmp>>(32-b))&(0x7fffffff>>(31-b)))|(MD5_tmp<

#define MD5_F(X,Y,Z) ((X&Y)|((~X)&Z))

#define MD5_G(X,Y,Z) ((X&Z)|(Y&(~Z)))

#define MD5_H(X,Y,Z) (X^Y^Z)

#define MD5_I(X,Y,Z) (Y^(X|(~Z)))

#define MD5_FF(a,b,c,d,Mj,s,ti) a=b+MD5_ROTL((a+MD5_F(b,c,d)+Mj+ti),s)

#define MD5_GG(a,b,c,d,Mj,s,ti) a=b+MD5_ROTL((a+MD5_G(b,c,d)+Mj+ti),s)

#define MD5_HH(a,b,c,d,Mj,s,ti) a=b+MD5_ROTL((a+MD5_H(b,c,d)+Mj+ti),s)

#define MD5_II(a,b,c,d,Mj,s,ti) a=b+MD5_ROTL((a+MD5_I(b,c,d)+Mj+ti),s)

#define MD5main \

{MD5_FF(a, b, c, d, M[0], 7, 0xd76aa478);\

MD5_FF(d, a, b, c, M[1], 12, 0xe8c7b756);\

MD5_FF(c, d, a, b, M[2], 17, 0x242070db);\

MD5_FF(b, c, d, a, M[3], 22, 0xc1bdceee);\

MD5_FF(a, b, c, d, M[4], 7, 0xf57c0faf);\

MD5_FF(d, a, b, c, M[5], 12, 0x4787c62a);\

MD5_FF(c, d, a, b, M[6], 17, 0xa8304613);\

MD5_FF(b, c, d, a, M[7], 22, 0xfd469501);\

MD5_FF(a, b, c, d, M[8], 7, 0x698098d8);\

MD5_FF(d, a, b, c, M[9], 12, 0x8b44f7af);\

MD5_FF(c, d, a, b, M[10], 17, 0xffff5bb1);\

MD5_FF(b, c, d, a, M[11], 22, 0x895cd7be);\

MD5_FF(a, b, c, d, M[12], 7, 0x6b901122);\

MD5_FF(d, a, b, c, M[13], 12, 0xfd987193);\

MD5_FF(c, d, a, b, M[14], 17, 0xa679438e);\

MD5_FF(b, c, d, a, M[15], 22, 0x49b40821);\

MD5_GG(a, b, c, d, M[1], 5, 0xf61e2562);\

MD5_GG(d, a, b, c, M[6], 9, 0xc040b340);\

MD5_GG(c, d, a, b, M[11], 14, 0x265e5a51);\

MD5_GG(b, c, d, a, M[0], 20, 0xe9b6c7aa);\

MD5_GG(a, b, c, d, M[5], 5, 0xd62f105d);\

MD5_GG(d, a, b, c, M[10], 9, 0x02441453);\

MD5_GG(c, d, a, b, M[15], 14, 0xd8a1e681);\

MD5_GG(b, c, d, a, M[4], 20, 0xe7d3fbc8);\

MD5_GG(a, b, c, d, M[9], 5, 0x21e1cde6);\

MD5_GG(d, a, b, c, M[14], 9, 0xc33707d6);\

MD5_GG(c, d, a, b, M[3], 14, 0xf4d50d87);\

MD5_GG(b, c, d, a, M[8], 20, 0x455a14ed);\

MD5_GG(a, b, c, d, M[13], 5, 0xa9e3e905);\

MD5_GG(d, a, b, c, M[2], 9, 0xfcefa3f8);\

MD5_GG(c, d, a, b, M[7], 14, 0x676f02d9);\

MD5_GG(b, c, d, a, M[12], 20, 0x8d2a4c8a);\

MD5_HH(a, b, c, d, M[5], 4, 0xfffa3942);\

MD5_HH(d, a, b, c, M[8], 11, 0x8771f681);\

MD5_HH(c, d, a, b, M[11], 16, 0x6d9d6122);\

MD5_HH(b, c, d, a, M[14], 23, 0xfde5380c);\

MD5_HH(a, b, c, d, M[1], 4, 0xa4beea44);\

MD5_HH(d, a, b, c, M[4], 11, 0x4bdecfa9);\

MD5_HH(c, d, a, b, M[7], 16, 0xf6bb4b60);\

MD5_HH(b, c, d, a, M[10], 23, 0xbebfbc70);\

MD5_HH(a, b, c, d, M[13], 4, 0x289b7ec6);\

MD5_HH(d, a, b, c, M[0], 11, 0xeaa127fa);\

MD5_HH(c, d, a, b, M[3], 16, 0xd4ef3085);\

MD5_HH(b, c, d, a, M[6], 23, 0x04881d05);\

MD5_HH(a, b, c, d, M[9], 4, 0xd9d4d039);\

MD5_HH(d, a, b, c, M[12], 11, 0xe6db99e5);\

MD5_HH(c, d, a, b, M[15], 16, 0x1fa27cf8);\

MD5_HH(b, c, d, a, M[2], 23, 0xc4ac5665);\

MD5_II(a, b, c, d, M[0], 6, 0xf4292244);\

MD5_II(d, a, b, c, M[7], 10, 0x432aff97);\

MD5_II(c, d, a, b, M[14], 15, 0xab9423a7);\

MD5_II(b, c, d, a, M[5], 21, 0xfc93a039);\

MD5_II(a, b, c, d, M[12], 6, 0x655b59c3);\

MD5_II(d, a, b, c, M[3], 10, 0x8f0ccc92);\

MD5_II(c, d, a, b, M[10], 15, 0xffeff47d);\

MD5_II(b, c, d, a, M[1], 21, 0x85845dd1);\

MD5_II(a, b, c, d, M[8], 6, 0x6fa87e4f);\

MD5_II(d, a, b, c, M[15], 10, 0xfe2ce6e0);\

MD5_II(c, d, a, b, M[6], 15, 0xa3014314);\

MD5_II(b, c, d, a, M[13], 21, 0x4e0811a1);\

MD5_II(a, b, c, d, M[4], 6, 0xf7537e82);\

MD5_II(d, a, b, c, M[11], 10, 0xbd3af235);\

MD5_II(c, d, a, b, M[2], 15, 0x2ad7d2bb);\

MD5_II(b, c, d, a, M[9], 21, 0xeb86d391);\

A = a += A, B = b += B, C = c += C, D = d += D;}

int main(){

long MD5_tmp;

extern char* StrMD5(const char* str, long length, char* md5){

/*

计算字符串MD5

参数说明:

str         字符串指针

length      字符串长度

md5         用于保存MD5的字符串指针

返回值为参数md5

*/

char *pp;

long l, i, *M, abcdtmp[4], A, B, C, D, a, b, c, d;

a = A = 0x67452301, b = B = 0xEFCDAB89, c = C = 0x98BADCFE, d = D = 0x10325476;

l = length + ((length % 64 > 56) ? (128 - length % 64) : (64 - length % 64));

if(!(pp = (char*)malloc((unsigned long)l))) return 0;

for (i = 0; i 

for (pp[i++] = 128; i 

*((long*)(pp + l - 8)) = length <

for (i = 0; i 

M = (long*)pp;

MD5main

}

free(pp);

abcdtmp[0] = a, abcdtmp[1] = b, abcdtmp[2] = c, abcdtmp[3] = d;

for (pp = (char*)abcdtmp, i = 0; i 

return md5;

}

extern char* FileMD5(const char* file, char* md5){

/*

计算文件MD5

参数说明:

file        文件路径字符串指针

md5         用于保存MD5的字符串指针

返回值为参数md5

*/

FILE* fh;

char* addlp;

long* temp;

long addlsize, j, M[16], abcdtmp[4], A, B, C, D, a, b, c, d;

long long length, i, cpys;

void *pp, *ppend;

fh = fopen(file, "rb");

fseek(fh, 0, SEEK_END);

length = _ftelli64(fh);

a = A = 0x67452301, b = B = 0xEFCDAB89, c = C = 0x98BADCFE, d = D = 0x10325476;

addlsize = (56 - length % 64 > 0) ? (64) : (128);

if (!(addlp = (char*)malloc(addlsize))) return 0;

cpys = ((length - (56 - length % 64)) > 0) ? (length - length % 64) : (0);

j = (long)(length - cpys);

fseek(fh, -j, SEEK_END);

fread(addlp, 1, j, fh);

for (addlp[j++] = 128; j 

pp = addlp + addlsize - 8;

*((long long *)pp) = length <

for (rewind(fh); 16 == fread(M, 4, 16, fh);)

MD5main

for (temp = addlp, ppend = addlp + addlsize; temp 

for (i = 0; i 

MD5main

}

free(addlp);fclose(fh);

abcdtmp[0] = a, abcdtmp[1] = b, abcdtmp[2] = c, abcdtmp[3] = d;

for (addlp = (char*)abcdtmp, i = 0; i 

return md5;

}

}

下面是报错。

\Untitled1.c|80|error: nested function 'StrMD5' declared 'extern'

\Untitled1.c|109|error: nested function 'FileMD5' declared 'extern'

------解决思路----------------------

去掉extern声明试试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/442215.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于c语言的英文论文,C语言论文外文翻译.doc

C语言论文外文翻译C语言论文外文翻译ASP.NET Technique1. Building ASP.NET PagesASP.NET and the .NET FrameworkASP.NET is part of Microsofts overall .NET framework, which contains a vast set of programming classes designed to satisfy any conceivable programming…

用C语言创建多个用户,实现支持多用户在线的FTP程序(C/S)

1 importjson2 importos3 importshelve4 importstruct5 importsubprocess67 from conf importsettings8 from lib importcommon91011 classHandlerRequest:12 """处理用户请求."""13 max_packet_size 819214 encoding utf-81516 struct_fmt i…

android 代理 wifi热点,android wifi热点默认网关

原贴&#xff1a;https://blog.csdn.net/jingzitakk66/article/details/89146696项目需求&#xff0c;android端创建热点&#xff0c;电脑端连接此热点后用socket实现数据传输&#xff0c;PC端获取网卡时无法判断多网卡情况下哪个IP为需要的IP&#xff0c;所以搜了下&#xff0…

android实现电话功能实验报告,安卓开发实验报告-20210407005833.docx-原创力文档

文档编制序号&#xff1a;[KKIDT-LLE0828-LLETD298-POI08]文档编制序号&#xff1a;[KKIDT-LLE0828-LLETD298-POI08]安卓开发实验报告安卓开发实验报告目录页面跳转长按图标抖动以及显示删除页面跳转功能&#xff1a;通过点击button实现2个activity之间的跳转。1.设置监听器监听…

android matrix 缩放,android – 如何获取任意矩阵的缩放值?

图像按矩阵缩放&#xff1a;Matrix matrix new Matrix();matrix.postScale(...);matrix.postTranslate(...);matrix.postRotate(...);...我希望缩放的图像不会小于原始图像的一半,因此总变焦不应小于0.5.但是怎么做呢&#xff1f;我试图获取矩阵的第一个值来检查&#xff1a;f…

买iphone不买android,为何宁可用4年前的苹果6s,也不买两三千的安卓呢?理由很真实...

在这个信息时代&#xff0c;几乎每个人都离不开手机&#xff0c;手机渗入到了我们生活的方方面面&#xff0c;不管是社交聊天、还是影音娱乐&#xff0c;甚至是办公出行&#xff0c;没有手机&#xff0c;很多人都会寸步难行。全球的智能手机市场竞争处于白热化的阶段&#xff0…

android 仿ios timepicker,android:TimePicker仿照IOS時間選擇器,可自定義選擇器

背景:項目要求寫一個選擇器:不僅僅是單純的時間,還包括自定義部分.搜了很久,搜出來只用一個自定義view.java類,再簡單封裝下的選擇器:貼下源碼:public class PickerView extends View{public static final String TAG "PickerView";/*** text之間間距和minTextSize之…

html5画图作品,8款最佳HTML5绘图工具

HTML5无疑是当前最受宠的一项技术&#xff0c;今天推荐8款HTML5绘图工具&#xff0c;同样惊艳你的眼球!这些绘图工具大多数是用HTML5画布(Canvas)实现的&#xff0c;部分辅以Javascript。对每一个web设计者来说&#xff0c;制图和草绘是他们工作中最喜欢的一件事情了。草绘和制…

vivoiqooz1鸿蒙系统,iQOOZ1评测:vivo新一代性价比神机

【手机中国评测】如果说2019是5G发展的元年&#xff0c;那么2020就是5G技术和终端奋起发力的一年。纵观目前市面上的5G机型我们不难发现&#xff0c;“涨价”已经成为了2020年的新关键词。技术成本的提升&#xff0c;让5G手机似乎失去了我们传统意义上的性价比。但这世间从来不…

html在表格添加下拉按钮,Bootstrap-table 使用说明--如何在表格td里增加一个按钮

如何在表格td里增加一个按钮&#xff1a;如何在列表操作列区域添加按钮初始化表格table.bootstrapTable --》columns 增加&#xff1a;{field: operate, title: __(Operate), table: table,buttons: [{name: detail, text: 详情, title: 详情, icon: fa fa-list, classname: bt…

qt解析html的数据,windows下用QTwebkit解析html

环境windows7 VS2010 QT5.2_opengl配置开发环境1、安装VS20102、安装QT 5.23、安装Visual Studio Add-in for QT54、配置VS 2010配置路径&#xff1a;QT5 > "Qt Options" > "Qt Versions" > Add默认路径为&#xff1a;C:\Qt\Qt5.2.0\5.2.0\msvc…

html缓慢下拉,html - 列表下拉导航-适用于除野生动物园之外的所有浏览器。 间隔开并缓慢 - 堆栈内存溢出...

问题我创建了一个完全由CSS完成的下拉菜单&#xff0c;使用了教程中介绍的绝对定位方法。 效果很好。 在Safari中&#xff0c;它运行缓慢&#xff0c;缓慢&#xff0c;并且链接间隔开。该下拉菜单可在Safari以外的所有浏览器中完美运行。 为什么&#xff1f;HomeAbout UsContac…

计算机网络拓扑图的描述,计算机网络拓扑结构 以下关于星型网络拓扑结构的描述正确的是______。 (多选题 )...

题目和答案在最下面&#xff01;全文转自百度&#xff0c;自己总结方便自己以后查找&#xff01;常见类型&#xff1a;星型拓扑总线拓扑▪ 环型拓扑▪ 树型拓扑▪ 混合型拓▪ 网型拓扑开关电源拓扑简单介绍的&#xff1a;星型优点&#xff1a;可靠性高&#xff0c;方便管理&…

考研生物和计算机结合的专业,2020考研:生物医学工程,考研是考原专业还是跨专业考计算机好?...

中公浙江研招网温馨提醒您关注专业解析&#xff1a;【2020考研&#xff1a;考研想考编程专业但没基础&#xff0c;该怎么准备?】2019浙江考研复试群&#xff1a;8663839642020浙江考研交流群&#xff1a;416469560许多考生在报考专业的时候会很茫然&#xff0c;怕考原专业毕业…

vue项目编写html,从头搭建、编写一个VUE项目

一、创建VUE项目1、新建一个vue项目进入工作目录&#xff0c;新建一个vue项目&#xff1a;vue init webpack 项目名vue init webpack vue-project-demoimage.png说明&#xff1a;Vue build > 打包方式&#xff0c;回车即可&#xff1b;Install vue-router > 是否要安装 v…

nodejs 保存html文件路径,nodejs如何将获得的数据保存到本地?

nodejs将获得的数据保存到本地可以使用Cookie进行数据保存或使用sessionStorage、localStorage进行数据保存。使用Cookie保存Cookie这个恐怕是最常见也是用得最多的技术了&#xff0c;也是比较古老的技术了。Cookie优点很多&#xff0c;使用起来很方便 但它的缺点也很多&#x…

大一的我

emmm&#xff0c;今天开始更新第一篇博客啦&#xff0c;一位ACM新人&#xff0c;请多多关照啦。先上一张ak图片激励一下自己(隐私问题所以码掉一部分) 一会更新一下

html 旋转木马 轮播,JS实现旋转木马式图片轮播效果

本文实例为大家分享了js图片轮播的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下主要html代码&#xff1a;Documentfunction $(id){ return document.getElementById(id);}var js_wrap $("js_wrap");var wrap_slide $("wrap_slide");var wrap…

对short类型,输出结果不一样?

#include<stdio.h> #include<iostream> using namespace std;int main() {short x,y;x-32654; y-1234;short zxy;cout<<z<<endl; //cout << (short)xy<<endl; return 0 ; }至今不明白为什么&#xff0c;&#xff0c;有没有哪位大佬讲一下…