我是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)


然后,如果同时定义了UQUARKDQUARK(可能没有任何意义)或未定义UQUARKDQUARK(可能在您的情况下发生),则编译将中止。

现在的问题是:谁定义了UQUARK和/或DQUARK?只有你能说出来。

关于c - 在C中未声明(不在函数中),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56142066/

10-10 21:25