casio1374633

导航

 
#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的区别~~

posted on 2013-04-27 20:57  casio1374633  阅读(118)  评论(0编辑  收藏  举报