Подтвердить что ты не робот

Объявление переменной между именем функции и первой фигурной скобкой

Я читаю статью об обфускации кода в 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

4b9b3361

Ответ 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)