相关疑难解决方法(0)

在每种语言中编译时,C和C++中有效的代码是否会产生不同的行为?

C和C++有许多不同之处,并非所有有效的C代码都是有效的C++代码.
("有效"是指具有已定义行为的标准代码,即不是特定于实现/未定义/等.)

在使用每种语言的标准编译器编译时,是否有任何一种在C和C++中都有效的代码会产生不同的行为?

为了使它成为一个合理/有用的比较(我试图学习一些实用的东西,而不是试图在问题中找到明显的漏洞),让我们假设:

  • 没有任何预处理器相关(这意味着没有hacks #ifdef __cplusplus,pragma等)
  • 任何实现定义在两种语言中都是相同的(例如数字限制等)
  • 我们正在比较每个标准的合理最新版本(例如,比如C++ 98和C90或更高版本)
    如果版本很重要,那么请提及每个版本的哪些版本产生不同的行为.

c c++

653
推荐指数
16
解决办法
4万
查看次数

为什么C字符文字而不是字符?

在C++中sizeof('a') == sizeof(char) == 1.这具有直观意义,因为它'a'是一个字符文字,并且sizeof(char) == 1由标准定义.

然而,在C中sizeof('a') == sizeof(int).也就是说,看起来C字符文字实际上是整数.有谁知道为什么?我可以找到很多关于这个C怪癖的提及,但没有解释为什么它存在.

c c++ sizeof char

101
推荐指数
7
解决办法
2万
查看次数

使用字符混淆sizeof的行为

#include <stdio.h>
#include <string.h>

int main(void)
{
    char ch='a';

    printf("sizeof(ch)          = %d\n", sizeof(ch));
    printf("sizeof('a')         = %d\n", sizeof('a'));
    printf("sizeof('a'+'b'+'C') = %d\n", sizeof('a'+'b'+'C'));
    printf("sizeof(\"a\")       = %d\n", sizeof("a"));
}
Run Code Online (Sandbox Code Playgroud)

该程序用于sizeof计算大小.为什么尺寸'a'不同于ch(哪里ch='a')?

sizeof(ch)          = 1
sizeof('a')         = 4
sizeof('a'+'b'+'C') = 4
sizeof("a")         = 2
Run Code Online (Sandbox Code Playgroud)

c sizeof

45
推荐指数
3
解决办法
2459
查看次数

在C中,为什么sizeof(char)1,当'a'是int时?

我试过了

printf("%d, %d\n", sizeof(char), sizeof('c'));

得到1,4作为输出.如果一个角色的大小是一个,为什么'c'给我4?我想这是因为它是一个整数.所以,当我这样做时,是否会char ch = 'c';发生隐式转换,在它被分配给char变量时,从4字节值到1字节值?

c size int sizeof char

42
推荐指数
3
解决办法
2万
查看次数

为什么sizeof(*"327")在64位系统上返回1而不是8?

 printf("%lu \n", sizeof(*"327"));
Run Code Online (Sandbox Code Playgroud)

我一直认为指针的大小在64位系统上是8个字节但是这个调用一直在返回1.有人可以提供解释吗?

c sizeof

22
推荐指数
2
解决办法
4571
查看次数

为什么这个程序的输出在C和C++之间有所不同?

可能重复:
C/C++中的字符大小('a')

以下程序

#include <stdio.h>

int main()
{
    printf("%d\n", sizeof('\0'));
    printf("%d\n", sizeof(0));
}
Run Code Online (Sandbox Code Playgroud)

用gcc输出编译

4
4
Run Code Online (Sandbox Code Playgroud)

和g ++

1
4
Run Code Online (Sandbox Code Playgroud)

为什么会这样?我知道这不是编译器的事情,而是C和C++之间的区别,但是原因是什么?

c c++ gcc g++

21
推荐指数
2
解决办法
1135
查看次数

在C&C++中返回sizeof()运算符的值

#include<stdio.h>
int main()
{
    printf("%d", sizeof('a'));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么在C和C++中编译时上面的代码会产生不同的结果?在C中,它打印4,而在C++中,它是更可接受的答案,即1.
当我用size函数中声明的char变量替换sizeof()内的'a'时,结果在两种情况下都是1!

c c++ compiler-construction

18
推荐指数
1
解决办法
3893
查看次数

sizeof运算符的工作在c和c ++中是否不同

我编写了一个小的printf语句,它在C和C++中的工作方式不同:

    int i;
    printf ("%d %d %d %d %d \n", sizeof(i), sizeof('A'), sizeof(sizeof('A')),    sizeof(float), sizeof(3.14));
Run Code Online (Sandbox Code Playgroud)

使用gcc编译器在c中的上述程序的输出是4 4 8 4 8

使用g ++编译器在c ++中上述程序的输出是4 1 8 4 8

我预计c中有4 1 4 4 8.但结果并非如此.

printf sizeof中的第三个参数(sizeof('A'))给出8

任何人都可以给我这个推理

c c++

9
推荐指数
1
解决办法
316
查看次数

为什么sizeof(char + char)返回4?

char  a, b;     
printf("%d", sizeof(a+b));
Run Code Online (Sandbox Code Playgroud)

printf写入屏幕的内容是什么?

我认为因为sizeof(char)= 1,sizeof(a + b)也将是1,但结果是4.我不明白这一点,如果我们添加两个字符,为什么写4?

c sizeof char

9
推荐指数
2
解决办法
485
查看次数

C++ 数组和指针的 sizeof 结果

在 x86_64 架构上,一个指针是 8 个字节。对我来说sizeof(x)应该返回 8是有意义的。我知道 achar是单个字节,而 5 个字节是 array 的大小z。为什么sizeof(z)不返回8背后的直觉是什么?

int* x = new int[10];
char z[5];

// Returns 8
std::cout << "This is the size of x: " << sizeof(x) << std::endl;

// Returns 5
std::cout << "This is the size of z: " << sizeof(z) << std::endl;
Run Code Online (Sandbox Code Playgroud)

c++ pointers internal-representation abstract-machine

7
推荐指数
1
解决办法
121
查看次数