#define OUTPUT (j) count ++ что это делает? - PullRequest
0 голосов
/ 22 марта 2019

Я хочу перевести это на c #. но я застрял на выходе.

что делает "#define OUTPUT (j)"?

Я видел это. C ++ Определить функцию

это похоже на определение функции, но входной параметр 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;
}

1 Ответ

1 голос
/ 22 марта 2019

Директива препроцессора

#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 не используется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...