我正在尝试编译下面的代码,我在读取void assert (n%64==0 && l%64 == 0);
的行上遇到两个错误。一个错误表示“未知类型名称'n'”,另一个错误表示“预期'''”。这些对我来说都没有意义,因为没有未打开的括号,我在上面用行const unsigned n = 2048;
定义'n'。
我应该注意,这段代码来自Daniela Frauchiger,Renato Renner和Matthias Troyer的2013年论文;可以在https://arxiv.org/pdf/1311.4547.pdf找到。它是随机抽取器的一部分,用于硬件随机数生成器。代码不是我的,但我正在努力使其适应我正在进行的项目。
const unsigned n = 2048; // CHANGE to the number of input bits, must be multiple of 64
const unsigned l = 1792; // CHANGE to the number of output bits, must be multiple of 64
// the extraction function
// parameters:
// y: an output array of l bits stored as l/64 64−bit integers
// m: a random matrix of l∗n bits , stored in l∗n/64 64−bit integers
// x: an input array of n bits stores as n/64 64−bit integers
void extract (uint64_t * y , uint64_t const * m, uint64_t const * x)
{
void assert (n%64==0 && l%64 == 0);
int ind=0;
// perform a matrix−vector multiplication by looping over all rows
// the outer loop over all words
for (int i = 0; i < l/64; ++i) {
y[i]=0;
// the inner loop over all bits in the word
for (unsigned j = 0; j < 64; ++j) {
uint64_t parity = m[ind++] & x[0];
// performs a vector multiplication using bit operations
for (unsigned l = 1; l < n/64; ++l)
parity ^= m[ind++] & x[l];
// finally obtain the bit parity
parity ^= parity >> 1;
parity ^= parity >> 2;
parity = (parity & 0x1111111111111111UL) * 0x1111111111111111UL;
// and set the j−th output bit of the i−th output word
y[i] |= ((parity >> 60) & 1) << j;
}
}
}
我对C很新,所以如果这是一个愚蠢的问题,我会道歉,但我无法从现有的答案中回答。
答案 0 :(得分:2)
void assert (n%64==0 && l%64 == 0);
试图声明一个函数alled assert,但是它位于错误的位置。只需删除void
,现在您正在调用&#34;调试功能&#34; assert
检查n
和l
是否符合所需的约束条件。
void extract (uint64_t * y , uint64_t const * m, uint64_t const * x)
{
assert (n%64==0 && l%64 == 0);
...
答案 1 :(得分:1)
在代码顶部添加关注标题:
#include <stdint.h> // uint64_t
#include <assert.h> // assert
更改
void assert (n%64==0 && l%64 == 0);
要
assert (n%6==0 && l%64 == 0);