你能想到一个程序,对于C和C++编译器会输出不同的结果(但在相同语言下会给出一致的输出)吗?
你能想到一个程序,对于C和C++编译器会输出不同的结果(但在相同语言下会给出一致的输出)吗?
一个常见的例子是sizeof('A')
,在C中通常为4,在C++中始终为1,因为类似'A'
的字符常量在C中具有类型int
,而在C++中具有类型char
:
#include <stdio.h>
int main(void)
{
printf("%d\n", sizeof('A'));
}
sizeof
返回的是 size_t
而不是 int
。因此你的代码包含错误。https://dev59.com/XHNA5IYBdhLWcg3wfd8m - UmmaGummasizeof (int)
可能是1。 - Keith Thompson在C ++或C99中,此程序输出12
,而在C89中则输出6
:
#include <stdio.h>
int main()
{
int a = 12//**/2;
;
printf("%d\n", a);
return 0;
}
int main() { return sizeof 'a'; }
sizeof(int) == 1
(仅当 CHAR_BIT >= 16
时可能),则在 C 中 sizeof 'a'
可能为 1。 - Keith Thompsontypedef char X;
int main() {
struct X { double foo; }
printf("%d\n", sizeof(X));
return 0;
}
#include <stdio.h>
。"%d"
需要一个 int
参数而非 size_t
。符合规范的实现可能会出现 sizeof (struct X) == 1
的情况(例如,CHAR_BIT == 64
),可通过将 struct X
定义为两个 char
成员替代使用 double
来修复。 - Keith Thompson以下内容来自维基百科,已经进行修改以产生每种语言中的一致输出:
extern int T;
int size(void)
{
struct T { int i; int j; };
return sizeof(T) == sizeof(int);
/* C: return 1
* C++: return 0
*/
}
int class;
这段代码无法在C++中编译,但可以在C语言中编译。
#include <stdio.h>
int main(void)
{
#ifdef __cplusplus
puts("C++");
#else
puts("C");
#endif
return 0;
}