关于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产生编译告警或是错误的方法吗?
雪羽乂鈴音
10 years, 2 months ago