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

22

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

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

我从未见过这样的东西,“v”和“c”是全局变量吗?

完整的示例代码如下:

#include <stdio.h>

#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 < 13; a++) { f[a] = v[a*2+1];};
         main(0,f);
         break;
      default:
         main(34123,"@h3eglhl1o. >w%o#rtlwdl!S\0m");
         break;
      }
}

这篇文章:brandonparker.net(已无法使用),但可以在web.archive.org中找到。

2个回答

30

这是旧风格的函数定义

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[]){...}

编辑:请记住在 main() 中,v 应该是 char** 而不是你写的 char*

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


那么int main(int c, char* v)与之相同吗? - Alejandro Alcalde
@algui91 - 是的。这是 K & R C - user93353

7

这是一种用于函数声明的 ANSI C 之前的语法。我们不再使用它。它与以下语法相同:

int main(int c, char *v)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接