编写extern C和C ++编译器

时间:2015-12-18 12:29:00

标签: c++

我如何解决这个问题。期待编写外部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。

2 个答案:

答案 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是否等同于charunsigned char,并且您的编译器供应商选择了后者。

signed char的值转换为不能代表值128的{​​{1}}会产生未定义的行为。因此,您的代码可以获得任何结果。

您唯一的选择是更改您的函数,使其接受可以表示signed char值的类型的整数参数。选项可能包括128(标准保证它可以表示128unsigned char之间的值)或0(保证能够表示255int之间的值-32767 - 并且,根据编译器,可能支持更大的范围。)

&#34;对&#34;解决方案取决于您需要函数生成正确输出的值的范围。您没有提供任何有关您的代码与32767以外的代码一起使用的值的信息,因此这是您需要自己解决的答案。

而且,BTW,128在标准C ++中返回main(),而不是int