1. hello_a.cpp

   첫 번째 예제는 main() 함수 대신 wmain() 함수를 쓰는 예제이다.

wmain 함수의  두 번째 파라미터를 const char *argv[]) 로 하는 대신에 const wchar_t *argv[] 로 해야 하며, 인자로 받은 문자열을 부동소수점수로 변환하기 위해  _wtof(wchar_t[]) 함수를 쓰고 있으며, 한글 출력을 위해 stdio.h 의 printf() 함수를 그냥 쓰면 된다.
wchar_t[] 타입의 문자열을 prntf() 함수로 출력하기 위해서는 포매터 %s 대신 %ws 를 써야 한다.
만일 #include <iostream> 구문을 생략하면, 컴파일 시 printf(), _wtof(), pow(), log() 함수들을 찾지 못하는 에러가 난다. 
 

// Filename: hello_a.cpp
//
//  Compile: cl /EHsc hello_a.cpp
//  Execute: hello_a [number1] [number2]

#include <iostream>

int wmain(int argc, const wchar_t *argv[])
{
    for (int i = 0; i < argc; i++) {
        printf("%d: %ws\n", i, argv[i]);
    }

    if (argc == 3)
    {
        double x;
        double y;
        x = _wtof(argv[1]);
        y = _wtof(argv[2]);
        printf( "  %s: %g + %g = %g\n", "합", x, y, x + y);
        printf( "  차: %g - %g = %g\n", x, y, x - y);
        printf( "  곱: %g * %g = %g\n", x, y, x * y);
        if (y != 0.0) 
        {
            printf( "  몫: %g / %g = %g\n", x, y, x / y);
        }
        if (x > 0.0) 
        {
            printf( "멱승: %g**%g = %g\n", x, y, pow(x,y));
        }
        if (x > 0.0 && x != 1.0 && y > 0.0) 
        {
            printf( "로그: log_%g( %g ) = %g\n", x, y, log(y)/log(x));
        }
    }

    return 0;
}

 

/*
Execute & Output:
Prompt> hello_a 1.2 5.4
0: hello_a
1: 1.2
2: 5.4
  합: 1.2 + 5.4 = 6.6
  차: 1.2 - 5.4 = -4.2
  곱: 1.2 * 5.4 = 6.48
  몫: 1.2 / 5.4 = 0.222222
멱승: 1.2**5.4 = 2.67657
로그: log_1.2( 5.4 ) = 9.24959
*/

 

 

2. hello_b.cpp

   두 번째 예제는 main() 함수 대신 _tmain() 함수를 쓰는 예제이다. Visual C++ 에서 _tmain 은 의 유무에 따라 wmain() 이나 main() 으로 바꾸어주는 일종의 매크로이다.

_tmain() 함수는 두 번째 파라미터를 const wchar_t *argv[]) 로 하는 대신에 const char *argv[] 로 해야 하며, 명령줄에서 실행 시에 인자로 받은 문자열을 부동소수점수로 변환하기 위해  atof(char[]) 함수를 쓰고 있으며, 한글 출력을 위해 stdio.h 의 printf() 함수를 그냥 쓰면 된다.
char[] 타입의 문자열을 prntf() 함수로 출력하기 위해서는 포매터 %s 를 그대로 쓰면 된다.
만일 #include <iostream> 구문을 생략하면, 컴파일 시 pow(), log() 함수들을 찾지 못하는 에러가 난다. 
 

// Filename: hello_b.cpp
//
//  Compile: cl /EHsc hello_b.cpp
//  Execute: hello_b [number1] [number2]

#include <iostream>
#include <atlstr.h>   // required for  _tmain()

int _tmain(int argc, const char *argv[])
{
    for (int i = 0; i < argc; i++) {
        printf("%d: %s\n", i, argv[i]);
    }

    if (argc == 3)
    {
        double x;
        double y;
    x = atof(argv[1]);
    y = atof(argv[2]);
       printf( "  %s: %g + %g = %g\n", "합", x, y, x + y);
       printf( "  차: %g - %g = %g\n", x, y, x - y);
       printf( "  곱: %g * %g = %g\n", x, y, x * y);
        if (y != 0.0) 
        {
            printf( "  몫: %g / %g = %g\n", x, y, x / y);
        }
        if (x > 0.0) 
        {
            printf( "멱승: %g**%g = %g\n", x, y, pow(x,y));
        }
        if (x > 0.0 && x != 1.0 && y > 0.0) 
        {
            printf( "로그: log_%g( %g ) = %g\n", x, y, log(y)/log(x));
        }
    }

    return 0;
}

/*
Execute & Output:
Prompt> hello_b 1.2 5.4
0: hello_b
1: 1.2
2: 5.4
  합: 1.2 + 5.4 = 6.6
  차: 1.2 - 5.4 = -4.2
  곱: 1.2 * 5.4 = 6.48
  몫: 1.2 / 5.4 = 0.222222
멱승: 1.2**5.4 = 2.67657
로그: log_1.2( 5.4 ) = 9.24959
*/

 

 

3. hello_c.cpp

   세 번째 예제는 C 언어에서도 통하는 전형적인 소스이다.Visual C++ 에서는 stdio.h 대신 iostream 을 인클루드해도 된다.

만일 #include <iostream> 구문을 생략하면, 컴파일 시 printf(), atof(), pow(), log() 함수들을 찾지 못하는 에러가 난다. 
 

// Filename: hello_c.cpp
//
//  Compile: cl /EHsc hello_c.cpp
//  Execute: hello_c [number1] [number2]

#include <iostream>

int main(int argc, const char *argv[])
{
    for (int i = 0; i < argc; i++) {
        printf("%d: %s\n", i, argv[i]);
    }

    if (argc == 3)
    {
        double x;
        double y;
        x = atof(argv[1]);
        y = atof(argv[2]);
        printf( "  %s: %g + %g = %g\n", "합", x, y, x + y);
        printf( "  차: %g - %g = %g\n", x, y, x - y);
        printf( "  곱: %g * %g = %g\n", x, y, x * y);
        if (y != 0.0) 
        {
            printf( "  몫: %g / %g = %g\n", x, y, x / y);
        }
        if (x > 0.0) 
        {
            printf( "멱승: %g**%g = %g\n", x, y, pow(x,y));
        }
        if (x > 0.0 && x != 1.0 && y > 0.0) 
        {
            printf( "로그: log_%g( %g ) = %g\n", x, y, log(y)/log(x));
        }
    }

    return 0;
}

/*
Execute & Output:
Prompt> hello_c 1.2 5.4
0: hello_c
1: 1.2
2: 5.4
  합: 1.2 + 5.4 = 6.6
  차: 1.2 - 5.4 = -4.2
  곱: 1.2 * 5.4 = 6.48
  몫: 1.2 / 5.4 = 0.222222
멱승: 1.2**5.4 = 2.67657
로그: log_1.2( 5.4 ) = 9.24959
*/

 

 

4. hello_d.cpp

   네 번째 예제는 C 언어에서도 통하는 전형적인 소스를 조금 변형하였다. 컴솔 출력 함수 printf() 대신 wprintf() 를 사용하였다. 이 경우 문자열 상수룰 L"........" 처럼 L을 선두에 붙여 하며, 한글을 출력하기 위해서는 문자열 포맷터도 %s 대신 대문자 S를 사용한 %S 로 해야 한다. 

만일 #include <iostream> 구문을 생략하면, 컴파일 시 printf(), wprintf(), atof(), pow(), log() 함수들을 찾지 못하는 에러가 난다. 
 

// Filename: hello_d.cpp
//
//  Compile: cl /EHsc hello_d.cpp
//  Execute: hello_d [number1] [number2]

#include <iostream>

int main(int argc, const char *argv[])
{
    for (int i = 0; i < argc; i++) {
        printf("%d: %s\n", i, argv[i]);
    }

    if (argc == 3)
    {
        double x;
        double y;
        x = atof(argv[1]);
        y = atof(argv[2]);

        wprintf( L"  %S: %g + %g = %g\n", "합", x, y, x + y);
        wprintf( L"  %S: %g - %g = %g\n", "차", x, y, x - y);
        wprintf( L"  %S: %g * %g = %g\n", "곱",x, y, x * y);
        if (y != 0.0) 
        {
            wprintf( L"  %S: %g / %g = %g\n", "몫", x, y, x / y);
        }
        if (x > 0.0) 
        {
            wprintf( L"%S; %g**%g = %g\n", "멱승", x, y, pow(x,y));
        }
        if (x > 0.0 && x != 1.0 && y > 0.0) 
        {
            wprintf( L"%S; log_%g( %g ) = %g\n", "로그", x, y, log(y)/log(x));
        }
    }

    return 0;
}

/*
Execute & Output:
Prompt> hello_d 1.2 5.4
0: hello_d
1: 1.2
2: 5.4
  합: 1.2 + 5.4 = 6.6
  차: 1.2 - 5.4 = -4.2
  곱: 1.2 * 5.4 = 6.48
  몫: 1.2 / 5.4 = 0.222222
멱승; 1.2**5.4 = 2.67657
로그; log_1.2( 5.4 ) = 9.24959
*/

 

 

5. hello_e.cpp

   다섯 번째 예제는 인수 없는 main() 함수를 사용하였다. 인수가 없는 대신 #include <atlstr.h> 하고 CommandLineToArgvW() 함수를 사용하면 명령줄에서 실행 시에 넣어준 옵션 인자들을 받아 처리할 수 있다.

 여기서도 앞의 네 번째 예제 처럼, 컴솔 출력 함수 printf() 대신 wprintf() 를 사용하였다. 이 경우 문자열 상수를 표현할 때 L"........" 처럼 L을 선두에 붙여야 하며, 한글을 출력하기 위해서는 문자열 포맷터도 %s 대신 대문자 S를 사용한 %S 로 해야 한다. 

만일 #include <iostream> 구문을 생략하면, 컴파일 시 printf(), wprintf(), atof(), pow(), log() 함수들을 찾지 못하는 에러가 난다. 

 

// Filename: hello_e.cpp
//
//  Compile: cl /EHsc hello_e.cpp
//  Execute: hello_e [number1] [number2]

#include <windows.h>

#include <iostream>
#include <atlstr.h>   // for CommandLineToArgvW()

int __cdecl main()
{
    LPWSTR *szArglist;
    int nArgs;

    szArglist = CommandLineToArgvW(GetCommandLineW(), &nArgs);
    if ( NULL == szArglist )
    {
        wprintf(L"CommandLineToArgvW failed\n");
        return 0;
    }
    else {
        for (int i = 0; i < nArgs; i++) {
            printf("%d: %ws\n", i, szArglist[i]);
        }
    }

    if (nArgs == 3)
    {
        double x;
        double y;
        x = _wtof(szArglist[1]);
        y = _wtof(szArglist[2]);
        wprintf( L"  %S: %g + %g = %g\n", "합", x, y, x + y);
        wprintf( L"  %S: %g - %g = %g\n", "차", x, y, x - y);
        wprintf( L"  %S: %g * %g = %g\n", "곱", x, y, x * y);
        if (y != 0.0) 
        {
            wprintf( L"  %S: %g / %g = %g\n", "몫", x, y, x / y);
        }
        if (x > 0.0) 
        {
            wprintf( L"%S: %g**%g = %g\n", "멱승", x, y, pow(x,y));
        }
        if (x > 0.0 && x != 1.0 && y > 0.0) 
        {
            wprintf( L"%S: log_%g( %g ) = %g\n", "로그", x, y, log(y)/log(x));
        }
    }

    LocalFree(szArglist);

    return 0;
}

/*
Execute & Output:
Prompt> hello_e 1.2 5.4
0: hello_e
1: 1.2
2: 5.4
  합: 1.2 + 5.4 = 6.6
  차: 1.2 - 5.4 = -4.2
  곱: 1.2 * 5.4 = 6.48
  몫: 1.2 / 5.4 = 0.222222
멱승: 1.2**5.4 = 2.67657
로그: log_1.2( 5.4 ) = 9.24959
*/

 

 

6. hello_f.cpp

   여섯 번째 예제는 닷넷용 컨솔 Hello 예제이다. 컴파일 시에에 옵션 /clr 을 주어야하며, 닷넷용이므로 #include 구문은 사용하지 못하고 using 구문을 사용하여야 한다. 이 예제에서는 using namespace System; 구문을 사용하였다.

  컴솔에 출력하는 함수도 printf() 함수가 아니라 Console::WriteLine() 함수를 사용하였다. 이 경우에도 문자열 상수를 표현할 때 L"........" 처럼 L을 선두에 붙여야 한다. 

// Filename: hello_f.cpp
//
//  Compile: cl /clr hello_f.cpp
//  Execute: hello_f [number1] [number2]

using namespace System;

int main(array<System::String ^> ^args)
{
    if (args->Length == 0)
        Console::WriteLine(L"Hello, world!");
    else if (args->Length == 1)
        Console::WriteLine(L"Hello, {0}씨!", args[0]);
    else if (args->Length == 2) {
        double x = Convert::ToDouble(args[0]);
        double y = Convert::ToDouble(args[1]);
        Console::WriteLine(L"  합: {0} + {1} = {2}", x, y, x+y);
        Console::WriteLine(L"  차: {0} - {1} = {2}", x, y, x-y);
        Console::WriteLine(L"  곱: {0} * {1} = {2}", x, y, x*y);
        if (y != 0)
            Console::WriteLine(L"  몫: {0} / {1} = {2}", x, y, x/y);
        if (x > 0)
            Console::WriteLine(L"멱승: {0}**{1} = {2}", x, y, Math::Pow(x, y));
        if (x > 0 && x != 1 && y > 0)
            Console::WriteLine(L"로그: log_{0}( {1} ) = {2}", x, y, Math::Log(y)/Math::Log(x));
    }
    return 0;
}

/*
Execute & Output:
Prompt> hello_f 1.2 5.4
  합: 1.2 + 5.4 = 6.6
  차: 1.2 - 5.4 = -4.2
  곱: 1.2 * 5.4 = 6.48
  몫: 1.2 / 5.4 = 0.222222222222222
멱승: 1.2**5.4 = 2.67657075645045
로그: log_1.2( 5.4 ) = 9.24958618840702
*/

 

 

 

Posted by Scripter
,