色々なmain関数の書き方【いろいろな Hello World】

プログラマの書くコードには書き手の性格が現れると言われています。「Hello world」等の数行のコードを書くだけでも、生まれ育った環境(Windows, Mac, オープンソースコミュニティ, ...)や言語経験(PHP, Python, Lisp)、書き手の性格によって色々な違いが出ます。

今回はそんなmain関数の複数の書き方や字下げスタイルを紹介していきます。

ビギナー

int main() {
	printf("Shop %d\n", 99);
	return 0;
}

インデントにタブを使う。

意識高い系

int main(void) {
    printf("Shop %d\n", 99);
    return 0;
}

インデントにスペースを使い始める。

意識低い系

int main(){
printf("Shop%d",99);
return 0;
}

インデントすら面倒になる。

2スペース派

int main() {
  printf("Shop %d\n", 99);
  return 0;
}

3スペース派

int main() {
   printf("Shop %d\n", 99);
   return 0;
}

1スペース派

int main() {
 printf("Shop %d\n", 99);
 return 0;
}

ミニマリスト

int main() {
  puts("Shop 99");
}

ニワカ

void main() {
  puts("Shop 99");
}

社会不適合者

main(){puts("Shop99");}

神経質

int main(int argc, const char *argv[]) {
    int i = 99;
    printf("Shop %d\n", (int) i);
    return (EXIT_SUCCESS);
}

関わっちゃいけないタイプ

int/**/main(){printf("Shop%c%d\n",32,99);return(0);}

ワンライナー。空白なし。

面倒くさいタイプ

int main(void) { return printf("Shop 99\n") - 8; }

プログラミング言語マニア

extern int main() {
  return puts("Shop 99"), 0;
}

あかん奴

int32_t main(...) {
  return puts("Shop 99"), 0;
}

Unixユーザ

int main(int argc, char *argv[], char *envp[]) {
	printf("Shop %d\n", 99);
	return 0;
}

Macユーザ

int main(int argc, char * argv[], char * envp[], char * apple[]) {
    NSLog(@"Shop %d\n", 99);
    return 0;
}

Appleユーザ

Windowsユーザ

int main(int argc, char *argv[])
{
	printf("Shop %d", 99);
	return 0;
}

Linuxコントリビューター

int main(int argc,
	 char *argv[])
{
	int v = 99;
	
	printf("Shop %d\n", v);
	return 0;
}

PHPユーザ

int main( int argc, char *argv[] ){
    printf ( "Shop %d\n", 99 );
	return 0;
}

Javaユーザ

int main(int argc, char *args[]){
    if (*args != NULL) {
	if (argc > 0) {
	    printf("Shop %d\n", 99);
	}
    }
}

JDK (src.zip)

C++ユーザ

int main(int argc, char* argv[]) {
  std::cout << "Shop " << 99 << std::endl;
}

C++マニア

auto main() -> int {
  for (char i : {83,104,111,112,32,57,57,10})
    std::cout << i;
}

C++界隈の怖いお兄さん達

int
main(int,
char const**)
{
  return [] () -> int {
    std::operator << ( std::cout, "Shop 99\n" ) ;
    return 0 ;
  }() ;
}

目を合わせてはいけない。

ラムダ信教者

int main() {
  std::vector<int> a = {9, 9};
  for_each(begin(a), end(a), ([](auto f, auto v) {
    return f(v), f;
  })([](auto v) {
    std::cout << v;
  }, "Shop "))("\n");
}

Lisper

(main)() {
  (puts (+ "Shop " "99")) ; }
(main)(int car, const char *list[]) {
  (* list = (+ "Shop " "99")) ; http://marycore.jp/
  (fwrite (* (+ list),
             (sizeof (* (* list))),
             (sizeof (& car)),
             (- (sizeof (+ 'eq #')),
                        (stdout)))) ; }

格好いい。

蛇使い

int main(int argc) {
    if (argc > 0)
        printf("Shop "),
        printf("%d", 99) ; }

Python言語ユーザ(Pythonista)。

マクロ使い

#define hello int main() { puts("Shop 99") ; }
hello

Pascalユーザ

#define begin {
#define end }

int main() begin
  puts("Shop 99");
end

Rubyユーザ

#undef begin
#define do {

Swiftユーザ

#define func auto
#define print(s) puts(s);

func main() -> int {
    print("Shop 99")
}

わかってる感出す人

#include "/home/me/shop99.c"

トライグラフ

int main(int argc, char *argv??(??)) ??<
  printf("Shop %d??/n", 99);
??>

ひねくれ者

main() <% puts("Shop 99"); %>

変態

// $ ./a.out Shop 99
main(c,v)char**v;{return~-c--?(main(c,v)*printf("%s%c",*(c+v),~-c?10:32)):0;}

サイコパス

typeof(printf("Shop%d",99))(main)(typeof(99)aa,...){
return(printf("Shop%d",aa=99)-(typeof(main(99)))sizeof(uint64_t));}

おっさん・古参・仙人

main(argv, argv, envp)
int argc;
char **argv;
char **envp;
{
	int i;

	i = 99;
	printf("Shop %d\n", i);

	exit(EXIT_SUCCESS);
}

昔はこういうコードを書くと報酬が上がった。行数が多いプログラムの方が沢山お金がもらえた時代があった。

ヨーダ

int main(int argc) {
  if (1 == argc) {
    puts("99 Shop");
  }
}

条件式を書く際に定数を左側に記述する「ヨーダ記法」というスタイル。

ヨーダ記法とは ─ 定数を左辺に記述するメリットと流行らない理由

K&R・スタイル

main(argc, argv)
    int argc;
    char *argv[];
{
    int i;

    if (argc > 0)
        i = 99;
    for ( ; i == 99; ) {
        printf("Shop %d", i);
        i = 0;
    }
    return 0;
}

BSD/オールマン・スタイル

int main()
{
    printf("Shop %d", 99);
    return 0;
}

Windows系の開発者が使うことで有名なスタイル。罪深きオールマンのスタイル。

オールマン絶対使いたくないマン・スタイル

int main(int argc,
         char *argv[],
         char *envp[]
) {
    if (argc > 0 &&
        argc < 9
    ) {
        puts("Shop 99");
    }
    else {
        printf("Shop 99\n");
    }
}

GNU信者

int main()
  {
    puts ("Shop 99");
  }

教祖リチャード・ストールマンのスタイル。

ホワイトスミスの親戚

int main()
    {
    puts("Shop 99");
    }

Bannerスタイル

int main() {
  puts("Shop 99");
  }

Picoスタイル

main()
{ int i = 99;
  printf("Shop %d", i); }

オリジナリティを求めるタイプ

int main()
  {
   puts("Shop 99");
  }

自我が強いタイプ

int main()
{
 puts("Shop 99");
}

通称「BSDスタイルなら1スペースインデントでも結構いけるんじゃね?」スタイル。

そっとしておかないとやばいタイプ

int main(int argc) {
   if (0 < argc) {
      puts("Shop 99");
   } // if (0 < argc)
} // int main(int argc)

2倍速再生とか親指シフトとか使うタイプ。

こんにちは世界

int main() {
  puts("Hello world");
}

ハローワールド。

地獄の世界

int main() {
  puts("Hell world");
}

ヘルレイザー。

おまけ

( ´□ω□)つ int main(int argc, char *argv[])
( ´・ω・)つ int main(void)
(; ^ω^)つ main()
広告