gpt4 book ai didi

c - 函数返回错误类型的变量时没有编译错误

转载 作者:太空宇宙 更新时间:2023-11-04 08:13:56 25 4
gpt4 key购买 nike

我有这个 C 程序。

#include <stdio.h>

unsigned char foo()
{
int x = 1000;
return x;
}

int main(int argc, char *argv[])
{
printf("foo returns %d\n", foo());
}

我正在使用以下内容来编译它:

gcc -c -g -o ../tgt/Linux/main.c.o -Wall -fpic main.c
gcc ../tgt/Linux/main.c.o -g -o ../tgt/Linux/t -Wall

它生成以下输出:

$ t
foo returns 232

这是foo()x的低8位。所以,这是有道理的。但我的问题是:为什么这没有生成警告,有没有办法让我为此类错误生成警告?

最佳答案

在您提到的评论中:

I wonder why is in not triggered when both using -pedantic -Wall -Wextra.

-Wall 没有打开 -Wconversion 标志 [1] .

-Wpedantic-pedantic 都不会捕获

return x; // This is valid as per strict ISO C

事实上 -pedantic 只会检查任何 GNU C 扩展 [2] .

例如,如果您编译以下内容:

int a=10;
int b[a]; // This is invalid as per strict ISO C

使用 -pedantic,gcc 应该给你:

 warning: ISO C90 forbids variable length array ‘b’ [-Wvla]

所以唯一的选择是在编译时显式地使用-Wconversion

gcc -Wconversion main.c -o main

关于c - 函数返回错误类型的变量时没有编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37009245/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com