相关疑难解决方法(0)

char是默认提升的吗?

这可能是一个愚蠢的问题,但有人可以请为C++ 11和C11提供标准参考:

char默认升为int

这里有一点背景:C和C++都有默认参数提升的概念(C++ 11:5.2.2/7; C11:6.5.2.2/6).这需要在以下调用中提升参数:

void f(int, ...);

float a = 1; short int b = 2; char c = 'x';

f(0, a, b, c);
Run Code Online (Sandbox Code Playgroud)

对于函数调用,a将转换为doubleb转换为int.但是会发生什么c?我一直都认为这char也得到提升int,但我无法在标准中找到相关的陈述.

c c++ integer-promotion language-lawyer

15
推荐指数
2
解决办法
1194
查看次数

printf从char数组中添加额外的`FFFFFF`到十六进制打印

请考虑以下简化代码.我想从文件中提取一些二进制数据/流,并以十六进制格式将其打印到标准输出.

我有额外的3个字节0xFFFFFF.怎么了?额外的字节来自哪里?

产量

in:
        2000FFFFFFAF00690033005A00
out:
        2000FFFFFFAF00690033005A00
Run Code Online (Sandbox Code Playgroud)

program.c

#include <stdio.h>
#include <stdlib.h>    

int main(int argc, char** argv) {

    int i;
    char raw[10] = {0x20,0x00,0xAF,0x00,0x69,0x00,0x33,0x00,0x5A,0x00};
    FILE *outfile;
    char *buf;

    printf("in:\n\t");
    for( i=0; i<10; i++ )
        printf("%02X", raw[i]);

    outfile = fopen("raw_data.bin", "w+b");

    fwrite(raw, 1, 10, outfile);

    buf = (char *) malloc (32 * sizeof(char));
    fseek(outfile, 0, SEEK_SET);
    fread(buf, 1, 10, outfile);

    printf("\nout:\n\t");
    for( i=0; i<10; i++ )
        printf("%02X", buf[i]);

    printf("\n");

    fclose(outfile);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c arrays printf

12
推荐指数
2
解决办法
1万
查看次数

在可变参数列表中有哪些类型的默认促销?

例如,我printf在C++中使用函数用于8位CPU(AVR).以下代码是否安全:

uint8_t a = 5;
printf("%d", a);
Run Code Online (Sandbox Code Playgroud)

这里%d期望int(在我的情况下为16位,在任何情况下至少为16位),但我传递8位整数.

C/C++标准是否保证任何类型的等级小于int升级int

同样的问题float a%f期望double,以及其他类似的类型.

c c++ variadic-functions

10
推荐指数
1
解决办法
1935
查看次数