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聲明試試
總結
以上是生活随笔為你收集整理的c语言中entern int x y,关于extern和int main()的结构有关问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php中获取本月第二天,php第二天
- 下一篇: java整型缓存_JAVA整型包装类的缓