隐式转换(U32 到 U8)不会引发警告

implicit cast (U32 to U8) does not raise warning

我在 Code::Blocks - gcc 上编译了以下代码:

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

void test_print(uint8_t test_var);

int main()
{
    uint32_t var = 100000U;

    test_print(var);

    return 0;
}


void test_print(uint8_t test_var)
{
    printf("test_var = %d\n", test_var);
}

为什么不发出任何警告? 这对我来说似乎很奇怪,因为我隐式地将 U32 转换为 U8。 (应该避免,因为信息会在此过程中丢失)

您需要将 -Wconversion 标志用于 gcc,它将接受以下内容:

[dbush@db-centos7 ~]$ gcc -Wconversion -g -Wall -Wextra -o x1 x1.c
x1.c: In function ‘main’:
x1.c:11:5: warning: conversion to ‘uint8_t’ from ‘uint32_t’ may alter its value [-Wconversion]
     test_print(var);

这是 -Wall-Wextra 中未包含的标志之一。