考虑:
#include <stdio.h>
int main(void) {
int i,t[5\];
for(i = 0; i < 5; i++)
t[i\] = 2 * i;
i = 0;
for(i = 0; i < 5; i++)
i += t[i\];
printf("%d",i);
return 0;
}
数组中的
\
是什么意思?
我在CLA(C Programming Language Certified Associate)样本论文中找到了这个程序.
程序不正确,
\]
是语法错误
一个可能的解释是作者不得不转义一些C运算符(例如
[
)来排版代码片段,他还转义了]
,而文字处理软件似乎没有管...
忽略这些
\
或用\]
替换所有出现的]
。
注意,这是一个棘手的问题,写这段代码的程序员应该被解雇。
另请注意有问题的文件还有其他错误。例如第 11 题的内容是:
如果你尝试编译并运行这个程序会发生什么?
#include <stdio.h> int main(void) { int t[2\][3\] = { { 3, 2, 1 }, { 1, 2, 3} }; printf("%d", sizeof(t) / sizeof(t[1\][1\])); return 0; }
一个。程序输出 6
B. 程序输出 3
C. 程序输出 2
D. 程序输出 4
忽略
\]
,程序有潜在的未定义行为,因为 %d
期望 int
但传递给 printf()
的值具有类型 size_t
.
第13、14、15、17题也有类似的问题
意思是:
C++ 研究所主席 Christopher Boguslawski,
没有人正确检查他们的样题是否有错误。
代码不会按照编写的方式运行。
可以推测他们希望 \ 位于行尾(因为它是一个有效的行继续字符)并且忘记放入换行回车。虽然这可以解决问题,但没有意义为什么他们会在每个结束括号之前这样做。
更有意义的是,他们可能在整个文档中进行了“查找和替换”,并意外传播了错误。
推测:可能某些排字员将所有数组写为:
t<|5|>
(或其他一些使它们返回并用适当的括号替换的配置。)
然后他们懒惰地做了一个查找
<|
替换[
没关系。
然后找到
|>
替换\]
哪个不行。
哪种有意义,因为
\
和]
在键盘上彼此相邻。 (他们可能指指点点。)
整个文档在每个
\
之前都有一个]
的事实是确凿的证据。
所以它很可能是一个草率的查找/替换,它弃用了他们的整个文档。
所以这意味着
\
中的t[5\]
是错误的。
在这种情况下不允许使用反斜杠,这是无效的语法。 您可以在 ideone 在线 上验证它。 您收到以下错误:
prog.c: In function ‘main’:
prog.c:4:13: error: stray ‘\’ in program
int i,t[5\];
^
prog.c:7:10: error: stray ‘\’ in program
t[i\] = 2 * i; i = 0;
^
prog.c:11:15: error: stray ‘\’ in program
i += t[i\];
^
如果你想编译代码没有错误,你只需要删除无效的
\
.
实际上,您使用反斜杠作为转义字符来使用它,例如在转义序列中使用它,例如换行符
'\n'
,这在here at wikipedia.