关于GCC和G++编译警告有关问题
关于GCC和G++编译警告问题
函数指针错误赋值, 为何gcc没有警告, 而g++有呢?
代码如下:
执行的编译命令如下:
gcc直接编译通过, 没有警告
g++编译报错.
百撕不得骑姐.
------解决思路----------------------
c语言是弱类型语言,
c++至少比c强点,在类型限制上。
------解决思路----------------------
------解决思路----------------------
c++类型检查比c强
------解决思路----------------------
c语言里 int fun() 是可以接受任意数量的参数的
所以很多人在提及 main 的标准形式时,都会强调 int main(void) 中的 void
而C++则严格得多,main就是 int main()
------解决思路----------------------
C对函数处理和C++对函数处理是不同的
这么说吧,gcc不对函数参数进行检查,而g++要对函数类型检查,尤其函数参数。因为g++要通过详细记录函数参数的信息,支持函数重载。
------解决思路----------------------
C 的 int foo() 的声明等价于 int foo(...) , C++ 等价于 int foo(void)
------解决思路----------------------
C 的 int foo() 的声明等价于 int foo(...) , C++ 等价于 int foo(void)
函数指针错误赋值, 为何gcc没有警告, 而g++有呢?
代码如下:
#include<stdio.h>
typedef int (*PF1)();
typedef int (*PF2)(int);
int f1() { return 100; }
int f2(int a) { return a; }
int main()
{
PF1 pf1 = f2;
printf("%d\n", pf1());
PF2 pf2 = f1;
printf("%d\n", pf2(1000));
return 0;
}
/* output:
1628937800
100
*/
执行的编译命令如下:
# gcc -Wall pointfunc.c -o pointfunc
gcc直接编译通过, 没有警告
# g++ -Wall pointfunc.c -o pointfunc_pp
pointfunc.c: In function ‘int main()’:
pointfunc.c:11: error: invalid conversion from ‘int (*)(int)’ to ‘int (*)()’
pointfunc.c:14: error: invalid conversion from ‘int (*)()’ to ‘int (*)(int)’
g++编译报错.
百撕不得骑姐.
------解决思路----------------------
c语言是弱类型语言,
c++至少比c强点,在类型限制上。
------解决思路----------------------
#include<stdio.h>
typedef int (*PF1)();
typedef int (*PF2)(int);
int f1() { return 100; }
int f2(int a) { return a; }
int main()
{
PF1 pf1 = (int(*)())f2;
printf("%d\n", pf1());
PF2 pf2 = (int(*)(int))f1;
printf("%d\n", pf2(1000));
return 0;
}
/* output:
1628937800
100
*/
------解决思路----------------------
c++类型检查比c强
------解决思路----------------------
c语言里 int fun() 是可以接受任意数量的参数的
所以很多人在提及 main 的标准形式时,都会强调 int main(void) 中的 void
而C++则严格得多,main就是 int main()
------解决思路----------------------
C对函数处理和C++对函数处理是不同的
这么说吧,gcc不对函数参数进行检查,而g++要对函数类型检查,尤其函数参数。因为g++要通过详细记录函数参数的信息,支持函数重载。
------解决思路----------------------
C 的 int foo() 的声明等价于 int foo(...) , C++ 等价于 int foo(void)
------解决思路----------------------
C 的 int foo() 的声明等价于 int foo(...) , C++ 等价于 int foo(void)