我試圖編譯下面的代碼,而我在讀取void assert (n%64==0 && l%64 == 0);
行獲得兩個錯誤。一個錯誤表示「未知類型名稱n」,另一個表示「預期」)'「。這些都對我沒有意義,因爲沒有未關閉的開放圓括號,我在上面用行const unsigned n = 2048;
定義'n'。「未知類型名稱N」的錯誤,即便N定義爲恆
我要指出,這個代碼來自2013年紙由丹妮拉Frauchiger,雷納託·倫納,和馬提亞特洛耶;可在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,所以我道歉,如果這是一個愚蠢的問題,但我一直無法從現有的答案回答。
有時一個函數的結果鑄有作廢' (void)'(注意括號),要麼明確忽略e返回值或(可能更常見)使代碼風格工具的警告無效。但'assert'不具有返回值,所以我認爲這種情況只是一個錯誤。 –
有問題的'void'不在PDF的第20頁的原始代碼示例中。以防萬一,你可能想檢查你的代碼是否有其他錯別字。 –