算法源码出现的报错,具体如下
#define VARS4UPDATE \
__m128i k[2], state[S_NUM], stateNew[S_NUM], M[M_NUM];
#define INIT_STATE(key, iv) \
k[0] = load(key + 16 * 0); \
k[1] = load(key + 16 * 1); \
state[0] = k[1]; \
state[1] = load(iv); \
state[2] = load(Z0); \
state[3] = load(Z1); \
state[4] = xor(state[1], state[0]); \
state[5] = setzero(); \
state[6] = k[0]; \
state[7] = setzero(); \
M[0] = state[2]; \
M[1] = state[3]; \
for (size_t i = 0; i < INIT_LOOP; ++i ) { \
UPDATE_STATE(M) \
} \
state[0] = xor(state[0], k[0]); \
state[4] = xor(state[4], k[1]);
#define COPY_FROM_LOCAL_IN_INIT(ctx) \
COPY_FROM_LOCAL (ctx) for (size_t i = 0; i < 2; ++i) \
{ store(&(ctx -> key[i][0]), k[i]); }
void rocca_init(rocca_context* ctx, const uint8_t* key, \
const uint8_t* iv) {
VARS4UPDATE
INIT_STATE(key, iv); // 报错:应输入表达式
COPY_FROM_LOCAL_IN_INIT(ctx); // 报错:不允许使用类型名
ctx->size_ad = 0;
ctx->size_m = 0;
}
第一次遇到使用多行定义的情况,查了一下找到两种可能原因。
{...}
或 do{...} while(0)
将定义内容括起来,尝试后结果同原报错。怀疑过可能是 _m128i
的问题,查阅 Microsoft Learn,只说明了“ARM 处理器不支持 __m128i
数据类型”。
这些都是宏展开
你先直接写展开后的代码,看哪一行报错。
1.UPDATE_STATE(M) \这一行缺少分号
2.COPY_FROM_LOCAL (ctx)这是个啥