Объявление переменной между именем функции и первой фигурной скобкой
Я читаю статью об обфускации кода в 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
Ответы
Ответ 1
Это определение функции старого стиля
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[]){...}
EDIT: Помните, что в main()
v
должен быть char**
не char*
, как вы уже писали.
Я думаю, что это стиль K & R
C.
Ответ 2
Это синтаксис пред-ANSI C для объявления функции. Мы больше не используем его. Это то же самое, что:
int main(int c, char *v)