Variablendeklaration zwischen Funktionsname und erster geschweifter Klammer

Lesezeit: 1 Minute

Benutzer-Avatar
Alejandro Alcalde

Ich lese einen Artikel über Code-Verschleierung in C, und eines der Beispiele deklariert die Hauptfunktion als:

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

Ich habe so etwas noch nie gesehen, v und c sind globale Variablen?

Das vollständige Beispiel ist folgendes:

#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;
      }
}

Der Artikel: brandonparker.net (Funktioniert nicht mehr)kann aber gefunden werden auf web.archive.org

Benutzer-Avatar
Omkant

Es ist die Funktionsdefinition im alten Stil

void foo(a,b)
int a;
float b;
{
// body
}

ist gleich wie

void foo(int a, float b)
{
// body
}

Ihr Fall ist der gleiche wie int main(int c,char *v){...} Aber es ist nicht richtig.

Die korrekte Syntax lautet: int main(int c, char **v){...}

Oder, int main(int c, char *v[]){...}

EDIT: Denken Sie daran, in main() , v sollte sein char** nicht der char* wie du geschrieben hast.

Ich denke es ist K & R C-Stil.

  • Ist das also dasselbe wie int main(int c, char* v)?

    – Alejandro Alcalde

    9. Dezember 2012 um 16:52 Uhr

  • @algui91 – ja. Das ist K & R C

    – Benutzer93353

    9. Dezember 2012 um 16:53 Uhr

Es ist eine Prä-ANSI-C-Syntax für die Funktionsdeklaration. Wir verwenden es nicht mehr. Es ist dasselbe wie:

int main(int c, char *v)

1246100cookie-checkVariablendeklaration zwischen Funktionsname und erster geschweifter Klammer

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy