我如何解决这个问题。期待编写外部C和C ++代码。 该计划很好。如何编写好的C和C ++代码。
#include <stdio.h>
#include “myccode.h”
void dchar(char c)
{
printf ("%d\n",(int)c);
}
void main()
{
dchar(128);
}
屏幕上必须是128,但是你得到-128。他们告诉我写一个extern C代码。我和我的朋友写了C en C ++代码编译器,但没有任何反应。我们仍然得到-128。
答案 0 :(得分:1)
char
通常是一个包含一个字节的带符号类型,即使这取决于编译器(感谢评论者指出这一点)。因此它可以保持-128到+127之间的数字。
因此,首先将128转换为char(导致溢出,转换为-128),然后返回int。
要打印128,您必须使用可以保存此值的类型。例如,这可以是unsigned char
:
#include <cstdio>
void dchar(unsigned char c)
{
printf ("%u\n",c);
}
int main()
{
dchar(128);
return 0;
}
输出:
128
答案 1 :(得分:1)
对于您的编译器,header("Content-Type: application/json");
可以支持的值范围是char
到-128
。实现定义了127
是否等同于char
或unsigned char
,并且您的编译器供应商选择了后者。
将signed char
的值转换为不能代表值128
的{{1}}会产生未定义的行为。因此,您的代码可以获得任何结果。
您唯一的选择是更改您的函数,使其接受可以表示signed char
值的类型的整数参数。选项可能包括128
(标准保证它可以表示128
和unsigned char
之间的值)或0
(保证能够表示255
和int
之间的值-32767
- 并且,根据编译器,可能支持更大的范围。)
&#34;对&#34;解决方案取决于您需要函数生成正确输出的值的范围。您没有提供任何有关您的代码与32767
以外的代码一起使用的值的信息,因此这是您需要自己解决的答案。
而且,BTW,128
在标准C ++中返回main()
,而不是int
。