необъявленный здесь (не в функции) в C - PullRequest
0 голосов
/ 15 мая 2019

Я новичок в языке c, но я пытаюсь понять этот алгоритм хеширования кварков, который был написан на языке c, и я обнаружил ошибку при компиляции исходного кода, исходя из того, что я понимаю WIDTH, который он уже объявил, но почему это еще ошибка?

это исходный код

#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];

1 Ответ

1 голос
/ 15 мая 2019

Я думаю, по какой-то причине ни 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? Только ты можешь сказать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...