免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: socay2
打印 上一主题 下一主题

[C] C语言使用宏的问题,以前没发现 [复制链接]

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
21 [报告]
发表于 2012-11-22 18:05 |只看该作者
  1. class a{
  2.   public: a(){printf("hehe");};
  3. };

  4. for(;;) a ai;
复制代码

论坛徽章:
0
22 [报告]
发表于 2012-11-22 18:08 |只看该作者
其实在c里,很多C++高手也容易犯这个错误
int func()
{
           int i=0;

           i++;

           int j;

           return 0;
}
这样的错误。

论坛徽章:
0
23 [报告]
发表于 2012-11-22 19:36 |只看该作者
gcc -E test.c  看看就一目了然了
int main()
{
int i = 0;
int int_i;
for (i = 1; i < 100; i++)       //for语句有问题啊
int int_i;                              //重复定义
}

论坛徽章:
1
巨蟹座
日期:2014-03-18 23:44:30
24 [报告]
发表于 2012-11-22 20:16 |只看该作者
starwing83 发表于 2012-11-22 15:55
其实原因很简单。

在C里,for,if等等结构后面的部分,需要是“语句”


受益匪浅!

论坛徽章:
1
巨蟹座
日期:2014-03-18 23:44:30
25 [报告]
发表于 2012-11-22 20:18 |只看该作者
回复 22# davidfoxhu


    这有什么错?

论坛徽章:
1
巨蟹座
日期:2014-03-18 23:44:30
26 [报告]
发表于 2012-11-22 20:32 |只看该作者
starwing83 发表于 2012-11-22 15:58
顺便说一下,这也是C和C++的区别之一。C++里,声明(确切地说,块内声明(block-declaration))是语句。可 ...


变量的定义算是一个语句吗?

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
27 [报告]
发表于 2012-11-23 00:28 |只看该作者
回复 26# socay2


    C语言的语法里面没有变量定义的概念。只有变量声明。

在某些特殊场合,声明的语义是定义。

C语言是描述式语言。它只是描述“做什么”,由编译器决定“怎么做”。比如你只向编译器说明“要什么”(声明),由编译器决定“何时要”。(定义)当然这之间有规则,这种规则其实就是C语言语义的一部分了。

论坛徽章:
0
28 [报告]
发表于 2012-11-23 01:12 |只看该作者
回复 22# davidfoxhu


    拜托,你说的那个在C99里根本没错。

C99允许for后面出现的第一个分号前是声明,C89则禁止这样做。

for(int i = 0;i<MAX;i++)//C99合法,C89非法

论坛徽章:
0
29 [报告]
发表于 2012-11-23 09:22 |只看该作者
回复 10# socay2


展开后编译不过是因为老的C标准里面有一个限制,不能在代码中间定义变量(定义变量要在函数的开始部分)。
如果把扩展名改为cpp,(或者修改编译器的编译选项),就可以通过了,你试一下。

论坛徽章:
0
30 [报告]
发表于 2012-11-23 09:44 |只看该作者
回复 28# x5miao
本来不想回复,没意思,每天就c89和c99的,而且那个地方跟for都没关系,只是说明c需要先声明再使用,没看清就乱叫。
我们是来学习的,不是来讨论什麽的,如果想钻牛角尖,论坛里有很多这样的人,去钻。
不再回复。


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP