c - #define OUTPUT(j) count++ 这是做什么的?
问题描述
我想把它翻译成c#。但我被困在输出端。
“#define OUTPUT(j)”有什么作用?
我见过这个。 C++ 定义函数
它看起来像 func 定义,但输入参数 j 与计数无关。
代码来自: 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;
}
解决方案
预处理器指令
#define OUTPUT(j) count++
使预处理器用 where 替换每次出现的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
未使用。
推荐阅读
- python - 有没有办法在给定行星坐标(太阳、月亮等)的情况下知道日期和时间?
- javascript - 具有笛卡尔实现的树递归
- c# - 如果 FtpWebRequest 出错如何清理资源
- r - 从列中提取国家名称(或其他实体)
- c# - 带逗号和点的双精度值的正则表达式
- ms-word - 如何从 Web 单词实例中检索查询字符串值
- flutter - 有没有办法使用在 android 上运行的颤振应用程序访问或控制树莓派 GPIO 引脚?
- ruby-on-rails - 如何嵌套 devise_invitable 以便用户只能被邀请到 1 家酒店
- dagger-2 - Dagger 2 - 当另一个提供方法取决于其返回类型时,@ContributesAndroidInjector 的行为方式
- linux - 无法远程登录 kube-proxy 暴露的 localhost 端口