关于C语言编译问题

oysx 2004-01-02 05:08:23
在C语言中,一般情况下如下方式编译时会出错的。因为变量的定义必须在函数的最开始(除了使用{})。
void func(void)
{
int i;
i = 0;
int j;
}
请问:不知道有没有编译选项可以让编译器对这种情况认可?
...全文
33 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzuyn 2004-01-03
  • 打赏
  • 举报
回复
觉得方便的时候会牺牲一些可读性,老的写法好
quickball 2004-01-02
  • 打赏
  • 举报
回复
在任何一个C++编译器下都能通过。支持最新的C99标准的C编译器可以。
leafsax 2004-01-02
  • 打赏
  • 举报
回复
建议用比较新的编译器
一般都支持变量的即时声明和使用
zhangfjj 2004-01-02
  • 打赏
  • 举报
回复
在ANSI C89对变量定义的位置有这样的规定:
1。函数外(全局变量)
2。函数形参
3。函数内部(局部变量),
4。块内部(即分程序,{}括起来的复合语句,有很多叫法),后两个就是楼主要讨论的位置。
C89规定在函数内部定义变量时,要把变量定义在“任何动作”之前。
与C89兼容的编译器都不支持楼主举出的例子
void func(void)
{
int i;
i = 0;
int j;
}
在C89的兼容编译器都会报错,但在C99(遗憾的是市面上没有支持C99的编译器)和C++编译器中都会通过。
但在块域中象以下的:
void main()
{
int i;
i=0;
printf("%d",i);
{
int j;
j=12;
printf("%d",j);
}
}
C89的兼容编译器都支持,连TC2.0都通过了。
lfxzm 2004-01-02
  • 打赏
  • 举报
回复
TC3++ 支持。
19830711 2004-01-02
  • 打赏
  • 举报
回复
先定义后赋值
hcj2002 2004-01-02
  • 打赏
  • 举报
回复
int i;
i = 0;

为什么不这样定义
int i = 0;
analyser2003 2004-01-02
  • 打赏
  • 举报
回复
为什么不用c++呢?
这是c的一大不方便。
ppayun 2004-01-02
  • 打赏
  • 举报
回复
边走边定义,好像不是ANSI标准,也不是好的编程风格,不推荐使用
挺拔的劲松 2004-01-02
  • 打赏
  • 举报
回复
为什么要用这种写法呢???这样很乱,可读性很差。
shuishuangyu 2004-01-02
  • 打赏
  • 举报
回复
一般的都可以吧
tuxw 2004-01-02
  • 打赏
  • 举报
回复
用新的编译器
好象到 TC3++ 就支持这种写法了

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧