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

问题描述 投票:17回答:2

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

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

我从未见过像这样的东西,vc是全局变量?

完整的例子如下:

#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(不再有效),但可以找到in web.archive.org

c obfuscation
2个回答
22
投票

这是旧式功能定义

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风格。


6
投票

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

int main(int c, char *v)
© www.soinside.com 2019 - 2024. All rights reserved.