3 回答
TA贡献1895条经验 获得超7个赞
以下内容(在C和C ++中有效)将(很可能)i在C和C ++中导致不同的值:
int i = sizeof('a');
有关差异的说明,请参见C / C ++中的字符大小('a')。
本文中的另一个:
#include <stdio.h>
int sz = 80;
int main(void)
{
struct sz { char c; };
int val = sizeof(sz); // sizeof(int) in C,
// sizeof(struct sz) in C++
printf("%d\n", val);
return 0;
TA贡献1818条经验 获得超11个赞
这是一个利用C和C ++中的函数调用和对象声明之间的区别以及C90允许调用未声明函数的事实的示例:
#include <stdio.h>
struct f { int x; };
int main() {
f();
}
int f() {
return printf("hello");
}
在C ++中,由于f创建和销毁了一个临时文件,因此不会打印任何内容,但在C90中,hello由于可以在不声明函数的情况下调用函数,因此不会打印任何内容。
如果您想知道该名称f是否被两次使用,则C和C ++标准明确允许这样做,并且要创建一个对象,您必须说清楚struct f是否要使用结构,或者struct要取消使用要使用的功能。
TA贡献1827条经验 获得超4个赞
对于C ++和C90,至少存在一种获得未定义实现的不同行为的方法。C90没有单行注释。稍加注意,我们就可以使用它来创建一个在C90和C ++中具有完全不同结果的表达式。
int a = 10 //* comment */ 2
+ 3;
在C ++中,从//到行尾的所有内容均为注释,因此其结果如下:
int a = 10 + 3;
由于C90没有单行注释,因此只有/* comment */是注释。第一部分/和2都是初始化的一部分,因此得出:
int a = 10 / 2 + 3;
因此,一个正确的C ++编译器将提供13,但一个完全正确的C90编译器将给8。当然,我在这里选择了任意数字-您可以视需要使用其他数字。
- 3 回答
- 0 关注
- 500 浏览
添加回答
举报