为什么会出现在当代码使用两个编译器编译产生的输出的差值gcc
和turbo c
.
#include <stdio.h>
int main()
{
char *p = "I am a string";
char *q = "I am a string";
if(p==q)
{
printf("Optimized");
}
else{
printf("Change your compiler");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我得到"Optimized"
的gcc
和"Change your compiler"
上turbo c
.为什么?
我知道这段代码不能用作"预期".只是快速查看此代码,我们认为返回值应为1,但在执行时它返回3.
// incorrect
variable = 1;
switch (variable)
{
case 1, 2:
return 1;
case 3, 4:
return 2;
default:
return 3;
}
Run Code Online (Sandbox Code Playgroud)
并且有一些正确的选项可以做到这一点:
// correct 1
variable = 1;
switch (variable)
{
case 1: case 2:
return 1;
case 3: case 4:
return 2;
default:
return 3;
}
Run Code Online (Sandbox Code Playgroud)
要么
// correct 2
switch (variable)
{
case 1:
case 2:
return 1;
case 3:
case 4:
return 2;
default:
return 3;
}
Run Code Online (Sandbox Code Playgroud)
我想知道为什么不正确的表单编译没有错误甚至警告(至少在Borland C++编译器中).
编译器在该代码中理解什么?
请看这个代码:
char o,t; cin >> o >> t;
switch (o,t)
{
case 's','g': cout << "Finish"; break;
default: cout << "Nothing";
}
Run Code Online (Sandbox Code Playgroud)
你可以看到switch设置为两个值,但是如果命令我不能同时检查它们.我该怎么办?有什么办法吗?