函数声明的作用域
在main函数中声明的max函数,在test()函数中可不可以不声明直接调用,还是说这个看编译器?#include <stdio.h>
int test();
void main()
{
float max(float x, float y);
float a,b;
scanf("%f,%f",&a,&b);
printf("%f",max(a,b));
test();
}
int test()
{
float a=1,b=2;
float c;
c=max(a,b);
printf("Max is %f\n",c);
return 0;
}
float max(float x, float y)
{ float z;
z=x>y?x:y;
return z;
}
感觉那个max只在main函数的作用域内吧,那个max得声明在函数外部,才能被发现调用 本帖最后由 jackz007 于 2022-11-15 22:32 编辑
确实,VC都可以,但是 gcc 不灵
【tdm-gcc 5.1.0】:
D:\\C>g++ -o x x.c
x.c:3:11: error: '::main' must return 'int'
void main()
^
x.c: In function 'int test()':
x.c:15:18: error: 'max' was not declared in this scope
c=max(a,b);
^
D:\\C>
【vc6.0】:
D:\\C>cl x.c
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86
Copyright (C) Microsoft Corp 1984-1998. All rights reserved.
x.c
Microsoft (R) Incremental Linker Version 6.00.8447
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
/out:x.exe
x.obj
D:\\C>
【vc9.0】:
D:\\C>cl x.c
用于 80x86 的 Microsoft (R) 32 位 C/C++ 优化编译器 15.00.30729.01 版
版权所有(C) Microsoft Corporation。保留所有权利。
x.c
Microsoft (R) Incremental Linker Version 9.00.30729.01
Copyright (C) Microsoft Corporation.All rights reserved.
/out:x.exe
x.obj
D:\\C> 这是想在一个什么样的场景里这么用呢, 既然想方便调用,声明放在文件作用域不是很合适么? 两手空空儿 发表于 2022-11-16 16:43
这是想在一个什么样的场景里这么用呢, 既然想方便调用,声明放在文件作用域不是很合适么?
突然想到的一个脑抽问题{:10_307:}
页:
[1]