我是C语言的新手,但是我试图理解用C语言编写的夸克哈希算法,并且在我编译源代码时发现了一个错误,从我了解它已经声明的宽度开始,但是为什么它仍然错误?
这是源代码
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
/* uncomment to printf execution traces */
// #define DEBUG
#if defined(UQUARK)
#define CAPACITY 16
#define RATE 1
#define WIDTH 17
#elif defined(DQUARK)
#define CAPACITY 20
#define RATE 2
#define WIDTH 22
#endif
#define DIGEST WIDTH
typedef uint64_t u64;
typedef uint32_t u32;
typedef uint8_t u8;
typedef struct {
int pos; /* number of bytes read into x from current block */
// u32 x[ WIDTH*8 ]; /* one bit stored in each word */
u32 x[ WIDTH*8 ]; /* one bit stored in each word */
} hashState;
#if defined(UQUARK)
/* 17 bytes */
u8 iv[] = {0xd8,0xda,0xca,0x44,0x41,0x4a,0x09,0x97,
0x19,0xc8,0x0a,0xa3,0xaf,0x06,0x56,0x44,0xdb};
并显示此错误
quark.c:36:10: error : 'WIDTH' undeclared here (not in a function)
u32 x[WIDTH*8];
最佳答案
我猜出于某种原因,UQUARK和DQUARK都没有定义。
添加此:
#if defined(UQUARK) && defined(DQUARK)
#error both UQUARK and DQUARK are defined
#endif
#if !defined(UQUARK) && !defined(dQUARK)
#error Neither UQUARK nor DQUARK are defined
#endif
在以下行之前:
#if defined(UQUARK)
然后,如果同时定义了
UQUARK
和DQUARK
(可能没有任何意义)或未定义UQUARK
和DQUARK
(可能在您的情况下发生),则编译将中止。现在的问题是:谁定义了
UQUARK
和/或DQUARK
?只有你能说出来。关于c - 在C中未声明(不在函数中),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56142066/