需要编写C程序。如果它在C语言编译器中运行,程序应该打印“C”。如果它在编译器C ++中运行,它应该打印“C ++”。
不能使用预处理程序指令。
在头部只是为了比较char
大小的任何角色的大小,如:
sizeof(char)==sizeof('a')
这是如何运作的:
// C code:
#include <stdio.h>
int main()
{
printf("%s", (sizeof(char)==sizeof('a') ? "C++" : "C"));
return 0;
}
输出 C
// C++ code:
#include <stdio.h>
int main()
{
printf("%s", (sizeof(char)==sizeof('a') ? "C++" : "C"));
return 0;
}
输出: C ++
有更好的方法吗?
答案 0 :(得分:2)
您可以检查__cplusplus
宏以查看您是否正在编译为c ++。
#include <stdio.h>
int main()
{
printf("%s\n",
#if __cplusplus
"C++"
#else
"C"
#endif
);
}
答案 1 :(得分:2)
标准http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1905.pdf 包含关于C和C ++之间差异的附录
因此它包含您使用的char vs int差异,但也包含
更改:在C ++中,类声明将类名引入范围 它被声明并隐藏任何对象,功能或其他声明 该名称在封闭范围内。 在C中,结构标记名称的内部范围声明永远不会隐藏 外部范围内对象或函数的名称
示例:(来自标准)
int x [99];
void f () {
struct x { int a ; };
sizeof (x ); /∗ size of the array in C ∗/
/∗ size of the struct in C++ ∗/
}
gcc在我的机器上给了396和g ++ 4