调用不带参数的函数,尽管它需要一个 [K&R-C]
Call a function without argument, although it needs one [K&R-C]
这是 K&R-C,这是代码:http://v6shell.org/history/if.c
查看主要方法。有这一行 "if(exp())".
但是函数exp声明为:exp(s)。所以它需要一个参数。
为什么这样行得通?为什么要这样做?
这是因为在c中
当函数应用于某些参数时,编译器将无法对参数类型和元数执行编译时检查。这可能会导致问题
调用未声明的函数在 C 中是糟糕的风格(见此)并且在 C++ 中是非法的
例如-
#include<stdio.h>
void f(int x);
int main()
{
f(); /* Poor style in C, invalid in C++*/
getchar();
return 0;
}
void f(int x)
{
printf("%d", x);
}
这个程序可以工作,但不应该 used.See 这个 Wiki link 更多。
如果你看一下定义:
exp(s) {
int p1;
p1 = e1();
if (eq(nxtarg(), "-o")) return(p1 | exp());
ap--;
return(p1);
}
s
未使用
- C 不需要编译时类型检查。它甚至不需要检查函数参数。一切都是 a/series 字节
为什么 C 不做任何这些检查?据我所知,这是因为在 C 的最初几年,计算机相当薄弱。进行这些检查需要多次扫描源代码,这基本上会增加 n 次扫描的编译时间。所以它只进行一次传递,并按原样获取每个名称,这就是不支持函数重载的原因
因此,如果定义确实以某种方式使用了 s
,您很可能会遇到一些可怕的运行时错误,并向控制台输出精彩内容
最终,它是 Unix V6 shell 支持命令中的一个错误,if
。
函数的代码是:
exp(s) {
int p1;
p1 = e1();
if (eq(nxtarg(), "-o")) return(p1 | exp());
ap--;
return(p1);
}
函数参数s
,隐式类型int
(函数本身也是),实际上在函数中没有使用,所以错误是s
的存在,而不是在 exp()
的调用中缺少参数。所有实际参数为零的调用都是正确的。
这是 K&R-C,这是代码:http://v6shell.org/history/if.c
查看主要方法。有这一行 "if(exp())".
但是函数exp声明为:exp(s)。所以它需要一个参数。
为什么这样行得通?为什么要这样做?
这是因为在c中
当函数应用于某些参数时,编译器将无法对参数类型和元数执行编译时检查。这可能会导致问题
调用未声明的函数在 C 中是糟糕的风格(见此)并且在 C++ 中是非法的
例如-
#include<stdio.h>
void f(int x);
int main()
{
f(); /* Poor style in C, invalid in C++*/
getchar();
return 0;
}
void f(int x)
{
printf("%d", x);
}
这个程序可以工作,但不应该 used.See 这个 Wiki link 更多。
如果你看一下定义:
exp(s) {
int p1;
p1 = e1();
if (eq(nxtarg(), "-o")) return(p1 | exp());
ap--;
return(p1);
}
s
未使用- C 不需要编译时类型检查。它甚至不需要检查函数参数。一切都是 a/series 字节
为什么 C 不做任何这些检查?据我所知,这是因为在 C 的最初几年,计算机相当薄弱。进行这些检查需要多次扫描源代码,这基本上会增加 n 次扫描的编译时间。所以它只进行一次传递,并按原样获取每个名称,这就是不支持函数重载的原因
因此,如果定义确实以某种方式使用了 s
,您很可能会遇到一些可怕的运行时错误,并向控制台输出精彩内容
最终,它是 Unix V6 shell 支持命令中的一个错误,if
。
函数的代码是:
exp(s) {
int p1;
p1 = e1();
if (eq(nxtarg(), "-o")) return(p1 | exp());
ap--;
return(p1);
}
函数参数s
,隐式类型int
(函数本身也是),实际上在函数中没有使用,所以错误是s
的存在,而不是在 exp()
的调用中缺少参数。所有实际参数为零的调用都是正确的。