隐式转换(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
中未包含的标志之一。
我在 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
中未包含的标志之一。