Miyama11
@Miyama11 (Miyama 11)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

C言語のソースコードをbcpadにコンパイルした際に、謎のエラーが出ます。

解決したいこと

本の問題をC言語で書き、ソースコードをbcpadにコンパイルした際に、謎のエラーが出ます。エラーの解決方法を教えてください。

発生している問題・エラー

■Z:\Documents> bcc32  991.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
991.c:
エラー E2378 991.c 7: Return文に ; がない(関数 right )
警告 W8057 991.c 8: パラメータ 'maze' は一度も使用されない(関数 right )
エラー E2378 991.c 13: Return文に ; がない(関数 left )
警告 W8057 991.c 14: パラメータ 'maze' は一度も使用されない(関数 left )
*** 2 errors in Compile ***

該当するソースコード

#include <stdio.h>

#define N 5
#define MASK (1 << (N * N)) - 1

unsigned int right(unsigned int maze){
  return (maze >> 1) & 0b0111101111011110111101111;
}
unsigned int up(unsigned int maze){
  return (maze << N) & MASK;
}
unsigned int left(unsigned int maze){
  return (maze << 1) & 0b1111011110111101111011110;
}
unsigned int down(unsigned int maze){
  return (maze >> N);
}

unsigned int (*move[])(unsigned int) = {right, up, left, down};

int enable(int maze){
  unsigned int man = (1 << (N * N - 1)) & (MASK - maze);
  while (1){
    unsigned int next_man = man;
    int i = 0;
    for (i = 0; i < 4; i++){
      next_man |= (*move[i])(man);
    }
    next_man &= (MASK - maze);
    if (next_man & 1 == 1) return 1;
    if (man == next_man) break;
    man = next_man;
  }
  return 0;
}
int search(int maze, int p1, int d1, int p2, int d2, int turn){
  int i = 0;
  if (turn == 1){
    if (p1 == p2) return 1;
    if ((p1 == 1) || (p2 == 1 << (N * N - 1))) return 0;
  }
  for (i = 0; i < 4; i++){
    int d = (d1 - 1 + i + 4) % 4;
    int next_p = (*move[d])(p1);
    if ((next_p & (MASK - maze)) > 0)
      return search(maze, p2, d2, next_p, d, 1 - turn);
  }
  return 0;
}
int main(void) {
  int count = 0;
  int i = 0;
  for (i = 0; i < (1 << N * N); i++){
    if (enable(i) > 0){
      if (search(i, 1 << (N * N - 1), 3, 1, 1, 1) > 0)
        count++;
    }
  }
  printf("%d", count);
  return 0;
}

自分で試したこと

本の出版社に問い合わせたところ、出版社のコンパイラでは実行できるようでした。

0

1Answer

コンパイラの問題のような気がしますね。
0b011110111101111011110111116236015 に置き換えたらコンパイルできたりしませんか?

1Like

Comments

  1. @Miyama11

    Questioner

    @itagagaki様、
    教えて頂き、ありがとうございます。
    試してみます。
  2. @Miyama11

    Questioner

    試した結果、エラーを1つに減らすことができました。
    ありがとうございました。
    0b1111011110111101111011110を、何に置き換えるかについても、教えて頂けませんでしょうか。

    ■Z:\Documents> bcc32 302.c
    Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
    302.c:
    エラー E2378 302.c 15: Return文に ; がない(関数 left )
    警告 W8057 302.c 16: パラメータ 'maze' は一度も使用されない(関数 left )
    *** 1 errors in Compile ***
  3. 0b...は2進数を表しますが、お使いのコンパイラがそれに対応していないということですね。
    基数の変換はプログラマー電卓アプリなどでもできますが、もしお持ちでなければこちらでどうぞ。
    https://hogehoge.tk/tool/number.html

Your answer might help someone💌