我想将此翻译为c#。但我被困在输出中。
“#define OUTPUT(j)”做什么?
我见过这个。 C++ Define function它看起来像函数定义,但输入参数j与count无关。
代码来自: https://github.com/smart-tool/smart/blob/master/source/algos/raita.c
#define OUTPUT(j) count++
void preBmBc(unsigned char *x, int m, int bmBc[]) {
int i;
for (i = 0; i < SIGMA; ++i)
bmBc[i] = m;
for (i = 0; i < m - 1; ++i)
bmBc[x[i]] = m - i - 1;
}
int search(unsigned char *x, int m, unsigned char *y, int n) {
int j, bmBc[SIGMA], count;
unsigned char c, firstCh, *secondCh, middleCh, lastCh;
if(m<2) return -1;
/* Preprocessing */
BEGIN_PREPROCESSING
preBmBc(x, m, bmBc);
firstCh = x[0];
secondCh = x + 1;
middleCh = x[m/2];
lastCh = x[m - 1];
END_PREPROCESSING
/* Searching */
BEGIN_SEARCHING
count = 0;
j = 0;
while (j <= n - m) {
c = y[j + m - 1];
if (lastCh == c && middleCh == y[j + m/2] &&
firstCh == y[j] &&
memcmp(secondCh, y + j + 1, m - 2) == 0)
OUTPUT(j);
j += bmBc[c];
}
END_SEARCHING
return count;
}
答案 0 :(得分:1)
预处理指令
{
"disableOptimisticBPs": true
}
使预处理器将#define OUTPUT(j) count++
的所有出现OUTPUT(j)
替换为count++
,其中j
是可变的,可以在指令的模式部分中使用。
代码
#define OUTPUT(j) count++
int count(4);
OUTPUT(1234);
std::cout << count << '\n';
被翻译为
int count(4);
count++;
std::cout << count << '\n';
由预处理器进行处理,然后由编译器进行编译。
此代码的输出为5
。由于未使用j
,因此忽略了该参数。