20

Cでのコードの難読化に関する記事を読んでいますが、例の1つで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 (機能しなくなりました)が、web.archive.orgで見つけることができます

4

2 に答える 2

28

これは古いスタイルの関数定義です

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 & RCスタイルだと思います。

于 2012-12-09T16:51:26.063 に答える
7

これは、関数宣言用のANSIC以前の構文です。もう使用していません。それは次と同じです:

int main(int c, char *v)
于 2012-12-09T16:52:07.607 に答える