函数名和第一个大括号之间的变量声明

我正在阅读一篇关于C语言中代码混淆的文章,其中一个例子将main函数声明为:

int main(c,v) char *v; int c;{...} 

我从来没有见过这样的东西, vc是全局变量?

完整的例子是这样的:

 #include  #define THIS printf( #define IS "%s\n" #define OBFUSCATION ,v); int main(c, v) char *v; int c; { int a = 0; char f[32]; switch (c) { case 0: THIS IS OBFUSCATION break; case 34123: for (a = 0; a w%o#rtlwdl!S\0m"); break; } } 

文章: brandonparker.net (不再有效)

这是旧式的function定义

 void foo(a,b) int a; float b; { // body } 

和…一样

 void foo(int a, float b) { // body } 

你的情况与int main(int c,char *v){...}相同int main(int c,char *v){...}但是它不正确。

正确的语法是: int main(int c, char **v){...}

或者, int main(int c, char *v[]){...}

编辑:记住在main()v应该是char**而不是char*就像你写的那样。

我认为这是K & R C风格。

它是函数声明的ANSI-C前语法。 我们不再使用它了。 它是一样的:

 int main(int c, char *v)