作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图在函数中使用递归,为此我必须使用局部变量。编译器在我定义局部变量的行中给出错误 c141。
int minimax(int board[9], int player) {
int winner;
winner = win(board);
if (winner != 0) return winner*player;
int moveminimax;
moveminimax = -1;
int scoreminimax;
scoreminimax = -2;
int i3;
for (i3= 0; i3 < 9; ++i3) {//For all moves,
if (board[i3] == 0) {//If legal,
board[i3] = player;//Try the move
int thisScore;
thisScore = -minimax(board, player*-1);
if (thisScore > scoreminimax) {
scoreminimax = thisScore;
moveminimax = i3;
}board[i3] = 0;//Reset board after try
}
}
if (moveminimax == -1) return 0;
return scoreminimax;
}
6-3-17 4 01pm.c(116): error C141: syntax error near 'int'
//c(116) is the where int winner is defined
当我在程序开始时全局定义变量时,错误消失了。
最佳答案
我的猜测是 Keil C 编译器不遵循 C99 标准,其中变量可以在任何地方定义,而是遵循较旧的 C89 标准,其中局部变量只能在开头定义 block 。
这意味着代码如下
int winner;
winner = win(board);
if (winner != 0) return winner*player;
int moveminimax;
moveminimax = -1;
int scoreminimax;
scoreminimax = -2;
int i3;
无效,因为它包含混合声明和语句。
通过在声明变量时初始化变量,可以完全删除其中两条语句,从而留下需要移动的函数调用和 if
语句。
试试这个:
int winner;
int moveminimax = -1;
int scoreminimax = -2;
int i3;
winner = win(board);
if (winner != 0) return winner*player;
关于c - C编程AT89C51中的局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44343374/
我是一名优秀的程序员,十分优秀!