#include "stdio.h" main() { char ch; //注意这里三行 int i; clrscr(); for (i=1;i<=26;i++) { ch=i+65; if(i%2==0) printf("\n"); printf("c=%c ascII=%d",ch,ch); } }
这个程序很简单把.
忽略格式的不规范.问题出现在一个朋友问到:
如果把那三行写成:
clrscr();
char ch;
int i;
就会出现一个很奇怪的问题.编译时候,编译器提示说ch和i没有被定义.
这意味着char ch和int i没有被翻译啊
这就很奇怪了.clrscr是双void类型,并未用到任何变量.怎么会在解释完这个以后直接跳转到for语句了呢?
我和群里的几个朋友讨论,初步的结果是
因为clrscr是tc专有的函数,即只有在tc(那个朋友的环境)和win-tc(我的环境)下面出现了这个错误,
在linux下面是因为根本没clr这个函数的.
那么只好初步认为是编译器的问题了.具体情况希望有高人回答.
如果问题被解决,我也会贴出来的.
-----------------------------%<----------------------------
这个问题被CU版主一语道破:
C89规定,变量声明要在代码块的开头。
这个就是为什么编译器报错的原因了.ansi_c和c的区别~~