开发者社区> 问答> 正文

关于extern函数时参数类型不匹配GCC编译如何可以生成告警或是错误的问题

有以下三个文件,两个.C文件,一个.h头文件,main.c会引用test.h,并调用testProtoType()函数。
test.c

int testProtoType(unsigned int a)
{
    printf("0x%x", a);
    return 0;
}
test.h

extern int testProtoType(unsigned short a);
main.c

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include "test.h"
int main()
{   
    long x = 0x12345678;
    testProtoType(x);

    return 0;
}
GCC进行编译(并不会报任何的编译告警和错误):

gcc.exe -Wall *.c -o main
GCC的版本号是:

gcc (GCC) 3.4.2 (mingw-special) Copyright
(C) 2004 Free Software Foundation, Inc. This is free software; see the
source for copying conditions. There is NO warranty; not even for
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
执行main后,结果如下:

0x5678 Press any key to continue . . .
生成的结果并不是0x12345678,而是按照头文件中声明的参数类型short进行了截断,但是GCC在编译链接时并没有产生告警或是错误,这是什么原因,有什么可让GCC产生编译告警或是错误的方法吗?

展开
收起
a123456678 2016-06-07 17:55:01 2814 0
1 条回答
写回答
取消 提交回答
  • 这事和extern没关系,GCC本来就不会主动报这种警告,即便你把两个程序写在一个文件里也这样。
    要想让GCC报警告,加一个-Wconversion参数(这个选项缺省是关闭的)。

    2019-07-17 19:30:35
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Decian GNU/Linux安全合规之路 立即下载
Debian GNU/Linux 安全合规之路 立即下载
低代码开发师(初级)实战教程 立即下载

相关镜像