c语言中for中声明变量,C中for循环中的变量重新声明
当尝试为多个平台编译以下(简化)代码时,我发现它在某些方面是失败的,即IBM的xlC_r.进一步的调查发现,它也没有进来和cl..它与g和Solaris的CC成功编译.
这是代码:
int main()
{
int a1[1];
bool a2[1];
for (int *it = a1, *end = a1+1; it != end; ++it) {
//...
bool *jt = a2, *end = a2+1;
//...
}
}
xlC_r错误:
"main.cpp", line 8.25: 1540-0400 (S) "end" has a conflicting declaration.
"main.cpp", line 6.25: 1540-0425 (I) "end" is defined on line 6 of "main.cpp".
ang子错误:
main.cpp:8:25: error: redefinition of 'end' with a different type
bool *jt = a2, *end = a2+1;
^
main.cpp:6:25: note: previous definition is here
for (int *it = a1, *end = a1+1; it != end; ++it) {
^
来错误:
"ComeauTest.c", line 8: error: "end", declared in for-loop initialization, may not
be redeclared in this scope
bool *jt = a2, *end = a2+1;
^
问题是为什么这是一个错误?
看看2003年的标准,它说如下(6.5.3):
The for statement
for ( for-init-statement; condition; expression ) statement
is equivalent to
{
for-init-statement;
while ( condition ) {
statement;
expression;
}
}
except that names declared in the for-init-statement are in the same
declarative-region as those declared in condition
这里没有声明的名称.
另外,它说(6.5.1):
When the condition of a while statement is a declaration, the scope
of the variable that is declared extends from its point of declaration
(3.3.1) to the end of the while statement. A while statement of the form
while (T t = x) statement
is equivalent to
label:
{
T t = x;
if (t) {
statement;
goto label;
}
}
再次,我不知道这是相关的,因为没有声明在条件.所以给出6.5.3的等效重写,我的代码应该是一样的:
int main()
{
int a1[1];
bool a2[1];
{
int *it = a1, *end = a1+1;
while (it != end) {
//...
bool *jt = a2, *end = a2+1;
//...
++it;
}
}
}
这显然会允许结束重新声明.
c语言中for中声明变量,C中for循环中的变量重新声明相关推荐
- java语言中的while、do while、for循环
java语言中的while.do while.for循环 什么是循环呢? 循环就是通过某个条件,重复的执行一段逻辑代码. 1.while循环 语法: while(布尔表达式){ //逻辑代码(循环操作 ...
- 在Ruby中,如何跳过.each循环中的循环,类似于‘continue‘[duplicate]
本文翻译自:In Ruby, how do I skip a loop in a .each loop, similar to 'continue' [duplicate] This question ...
- [原创]C/C++语言中,如何在main.c或main.cpp中调用另一个.c文件
C/C++语言中,如何在main.cpp中调用另一个.c文件主要有5种思路: 1.在VS2012 IDE中,将被引用的.c文件后缀名全部修改为.h,然后通过IDE的解决方案资源管理器中鼠标右键单击&q ...
- c语言中b的作用是什么意思,C语言中是什么意思?ab怎么理解?
C语言中&是什么意思?a&b怎么理解?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! C语言中& ...
- c语言中sqrt函数_sqrt()函数以及C ++中的示例
c语言中sqrt函数 C ++ sqrt()函数 (C++ sqrt() function) sqrt() function is a library function of cmath header ...
- c语言中ai是什么,AICODE在C语言教学中应用研究.doc
AICODE在C语言教学中应用研究 AICODE在C语言教学中应用研究 摘要:本文研究了AI-CODE作为一种教学工具在C语言教学中的应用.首先,对传统C语言教学的不足.枯燥.缺乏互动进行了分析.其次 ...
- c语言中free函数_free()函数与C ++中的示例
c语言中free函数 C ++ free()函数 (C++ free() function) free() function is a library function of cstdlib head ...
- c语言中为了结束由while,在C语言中,为了结束由while语句构成的循环,while后一对圆括号中表达式的值应该为()....
线路8的速率是(,中为值国制光纤照美标准定的●按通信. 最多可以同时演奏出(,语言e语对圆括之间多台进行乐器连接通过方式,个通准的支持I标道●通用M音乐设备. 束由式模型C制号使全电用的颜色彩色式的视 ...
- c语言中aver是什么意思_Linux系统top命令中的io使用率,到底是什么意思?
最近在做连续数据流的缓冲系统,C语言代码实现后,粗略测试了下,功能上应该没有问题.那么,接下来就该测试性能了.输入 top 命令,的确可以看到一系列 cpu 使用率,其中一个值得注意的子项就是 io ...
- [c语言]c语言中a++ ++a在加法运算中和printf函数中的运算顺序(初学者版)
目录 加法运算顺序: 结论: 具体详情: printf函数中的运算顺序: 结论: 具体详情: 加法运算顺序: 结论: a++ ++a在加法中按如下顺序: 1.sum的值先加上a++中的a: 2.然后再 ...
最新文章
- torch中的copy()和clone()
- java查看文件夹下文件夹大小,java 获取文件夹大小,文件大小,文件个数
- SpringCloud微服务云架构构建B2B2C电子商务平台简介
- 使用thrift进行跨语言调用(php c# java)
- 大咖分享会 | 百度首次揭秘如何构建用户画像与移动统计
- [Android]使用Dagger 2进行依赖注入 - Producers(翻译)
- DOM判断节点类型分分钟搞定
- JeeSite 工作流Activiti的应用实例
- python执行方式及变量
- 2021-06-26数组详解
- 浅谈微生物组常用了四种统计检验方法
- ‘gbk‘ codec can‘t decode byte 0xae in position 199: illegal multibyte sequen 问题解决
- HTML和CSS基础学习
- 苏宁回应股权质押给淘宝;日本政府用 AI 帮民众找对象;魅族回应 “暗中给手机植入木马” | EA周报...
- 电脑的大脑——CPU
- 我国在计算机科学领域故事,《计算机故事-一》.pdf
- facetime 来电提醒_从命令行打开FaceTime调用
- 数据分析案例3 海量数据分析---根据Ip地址计算归属地的需求
- 荣耀v10+android+8.1,别在纠结:华为荣耀V10和荣耀10的真正的不同在
- 企业订货管理系统定制开发的作用|手机订货系统的说明