我正在阅读一篇关于C中代码混淆的文章,其中一个例子将main函数声明为:
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 (不再有用),但可以找到in web.archive.org
答案 0 :(得分: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风格。
答案 1 :(得分:6)
它是用于函数声明的ANSI-C前语法。我们不再使用它了。它与:
相同int main(int c, char *v)