相关疑难解决方法(0)

隐式类型促销规则

本文旨在用作关于C中隐式整数提升的常见问题解答,特别是由通常的算术转换和/或整数提升引起的隐式提升.

示例1)
为什么这会给出一个奇怪的大整数而不是255?

unsigned char x = 0;
unsigned char y = 1;
printf("%u\n", x - y); 
Run Code Online (Sandbox Code Playgroud)

例2)
为什么这会给"-1大于0"?

unsigned int a = 1;
signed int b = -2;
if(a + b > 0)
  puts("-1 is larger than 0");
Run Code Online (Sandbox Code Playgroud)

示例3)
为什么更改上例中的类型来short解决问题?

unsigned short a = 1;
signed short b = -2;
if(a + b > 0)
  puts("-1 is larger than 0"); // will not print
Run Code Online (Sandbox Code Playgroud)

(这些示例适用于16位或短16位的32位或64位计算机.)

c type-conversion implicit-conversion

50
推荐指数
2
解决办法
7417
查看次数

C:如何摆脱转换错误?

我有一个使用gcc版本4.6.3的项目,我被迫使用"-Wall -Werror -Wconversion"进行编译.以下简单示例显示了我无法摆脱的错误:

#include <stdint.h>

int main(void) {
  uint32_t u = 0;
  char c = 1;

  u += c;
  return (int)u;
}
Run Code Online (Sandbox Code Playgroud)

用上面的标志编译它给出:

test.c:7:8: error: conversion to ‘uint32_t’ from ‘char’ may change the sign of the result [-Werror=sign-conversion]
Run Code Online (Sandbox Code Playgroud)

好的.只需添加一个类型转换,对吗?不.将第7行更改为u += (uint32_t)c不会使错误消失.即使改变它u = u + (uint32_t)c也不会让它消失.

有可能解决这个问题吗?

请注意,"char"来自字符串,因此我无法更改其类型.

c gcc casting

4
推荐指数
1
解决办法
2254
查看次数

如何删除警告“从'int'转换为'char'可能会改变其值”警告

我虽然说,如果我cast有一个像这样的数字(unsigned char)32,就足以解决编译器的警告,但这并不是我的计划。

在这里,我有程序的以下部分,实际上解释了这个问题:

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

int main(void){
    char *ptr = malloc(6);
    const char *name = "MICHI";
    unsigned int i = 0;

    if(ptr){
        strcpy(ptr, name);
        ptr[strlen(ptr)] = '\0';
    }else{
        return 1;
    }

    while(ptr[i] != '\0'){
        if((ptr[i] >= 'A') && (ptr[i] <= 'Z')){
            ptr[i] += (unsigned char)32;
        }
        i++;
    }

    printf("Name = %s\n",ptr);
    if(ptr){
        free(ptr);
        ptr = NULL;
    }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试在打开编译器警告的情况下对其进行编译时,得到以下信息:

error: conversion to ‘char’ from ‘int’ may alter its value [-Werror=conversion]|
Run Code Online (Sandbox Code Playgroud)

这意味着以下内容ptr[i] …

c casting

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

标签 统计

c ×3

casting ×2

gcc ×1

implicit-conversion ×1

type-conversion ×1