我想大家平时用C++用多了可能对C语言有这样一条规定感到有点奇怪了吧!
那大家先编译如下的代码(记住要保存为.c扩展名结尾的文件):
#include “stdio.h”
void print( void );
int main()
{
print();
return 0;
}
void print( void )
{
char *h = “hello”;
printf( “%s “, h );
char *w = “world!”;
printf( “%s\n”, w);
}
然后用VC或BCC编译一下看看!
以下是BCC32 5.8版编译的情况:
Borland C++ 5.8 for Win32 Copyright (c) 1993, 2005 Borland
test.c:
Error E2140 test.c 17: Declaration is not allowed here in function print
*** 1 errors in Compile ***
而将声明放到程序段头部则正常编译通过并执行正常。
还有把扩展名改为CPP也正常。
这是因为
C里面有这样的规定,C++里面没有。
编译器是以扩展名识别是C还是C++的。
C里面声明 在中间 在前面
VC6 出错 正常 (VC6++)
BCC 出错 正常 (Ver 5.8)
GCC 正常 正常 (SunOS 5.8)
ForteC 出错 正常 (SunOS 5.8)
所以大家以后编程时注意:为了编写可移植的代码,在写代码的时候还是遵循这条标准为好!
-
近期文章
近期评论
- coolker 发表在《打造最快的Hash表》
- struggle 发表在《提供C语言教学课件(适用于初学者)》
- zhanghaibo 发表在《提供C语言教学课件(适用于初学者)》
- zhanghaibo 发表在《提供C语言教学课件(适用于初学者)》
- diys 发表在《C语言编程宝典(王大刚) 1.1 C 语言的产生与发展》
文章归档
- 2022 年十月
- 2014 年一月
- 2013 年十二月
- 2012 年十一月
- 2012 年七月
- 2012 年六月
- 2012 年五月
- 2012 年四月
- 2012 年三月
- 2012 年二月
- 2011 年十二月
- 2011 年十月
- 2011 年九月
- 2011 年八月
- 2011 年七月
- 2011 年六月
- 2011 年五月
- 2011 年四月
- 2011 年三月
- 2011 年二月
- 2011 年一月
- 2010 年十二月
- 2010 年十一月
- 2010 年十月
- 2010 年九月
- 2010 年八月
- 2010 年七月
- 2010 年六月
- 2010 年五月
- 2010 年四月
- 2010 年三月
- 2010 年二月
- 2010 年一月
- 2009 年十二月
- 2009 年十一月
- 2009 年十月
- 2009 年九月
- 2009 年八月
- 2009 年七月
- 2009 年六月
- 2009 年五月
- 2009 年四月
- 2009 年三月
- 2009 年二月
- 2009 年一月
- 2008 年十二月
- 2008 年十一月
- 2008 年十月
- 2008 年九月
- 2008 年八月
- 2008 年七月
- 2008 年六月
- 2008 年五月
- 2008 年四月
- 2008 年三月
- 2008 年二月
- 2008 年一月
- 2007 年十二月
- 2007 年十一月
- 2007 年十月
- 2007 年九月
- 2007 年八月
- 2007 年七月
- 2007 年六月
- 2007 年三月
- 2007 年二月
- 2007 年一月
- 2006 年十二月
- 2006 年十一月
- 2006 年十月
- 2006 年九月
- 2006 年八月
- 2006 年七月
- 2006 年六月
- 2006 年五月
- 2006 年四月
- 2006 年三月
- 2006 年二月
- 2006 年一月
- 2005 年十二月
- 2005 年十一月
分类目录
功能
今天在bcc和vc++下测试了如下的代码,可以这样写的!
/* 保存为test.c */
#include <stdio.h>
void print(void);
int main()
{
print();
return 0;
}
void print(void)
{
int i;
i = 1;
printf( “i : %d\n”, i );
for( i = 0; i<10; i++ )
{
int j = 0; /* 要在一段代码的前面 */
printf(“%d : %d\n”, i, j );
}
}