[C++
의 표준출력 std::cout
의 연습]
to_upper 프로그램 만들기
다음과 같은 동작을 하는 프로그램을 쓰세요
* LOUD AND UNBEARABLE FEEDBACK NOISE *
과제를 작성하기 전 C++의 표준 입출력을 알아야 한다.
#include <iostream>
int main()
{
std::cout << "Hello, World!!"
std::cout << std::endl;
return (0);
}
C에서 사용한 stdio.h
와 달린 C++에서는 iostream
를 사용한다. .h
를 안 붙인다는 차이가 있으며 함수 작성에 가장 기본적인 헤더.
iostream
은 C++의 입출력을 담당하는 헤더이며 객체지향언어인 C++처럼 iostream
에 있는 입출력 함수들 역시 객체로 정의되어 있다. (iostream의 구성 요소 정리)
C++ 표준 라이브러리에 존재하는 모든 변수나 객체는 std 표준 네임 스페이스에 포함된다. 표준 출력 cout
객체를 사용하기 위해서는 std::cout
처럼 네임 스페이스를 붙여 사용해야 한다.
네임 스페이스는 정의된 객체나 함수의 소속을 의미한다. a()
와 b()
에 각각 abc
객체를 선언했을 때 a::abc
, b::abc
로 접두어만 다르게 해 사용할 수 있다는 뜻
int doSomething(int x, int y)
{
return x + y;
}
int doSomething(int x, int y)
{
return x - y;
}
#include <iostream>
#include "foo.h"
#include "goo.h"
int main()
{
std::cout << doSomething(4, 3);
return 0;
}
>> c:\VCProjects\goo.h(4) : error C2084: function 'int __cdecl doSomething(int,int)' already has a body
예제처럼 같은 프로그램에 이 둘을 같이 포함하면 이름과 매개 변수가 같은 함수가 같은 스코프에 있음으로써 이름 충돌이 발생한다.
namespace Foo
{
int doSomething(int x, int y)
{
return x + y;
}
}
namespace Goo
{
int doSomething(int x, int y)
{
return x - y;
}
}
이제 Foo안에 doSomething()
이, Goo안에 doSomething()
이 있다.
각 네임 스페이스 안에 있는 식별자를 찾기 위해서는 스코프 분석 연산자(::)가 필요하다.
이 연산자를 사용하려면 식별자 이름 앞에 사용할 네임 스페이스를 붙이면 된다. Foo::doSomething(x, y)
, Goo::doSomething(x, y)
#include <iostream>
int main()
{
std::cout << Foo::doSomething(4, 3); << '\n'
std::cout << Goo::doSomething(4, 3); << endl (둘 다 개행 출력임)
return 0;
}
NAME = megaphone
CPPC = clang++
CPPFLAGS = -Wall -Wextra -Werror
RM = rm -f
MAIN = megaphone.cpp
$(NAME): $(MAIN)
$(CPPC) $(MAIN) $(CPPFLAGS) -o $(NAME)
all : $(NAME)
clean: $(RM) $(NAME)
re: clean all
.PHONY: all clean re
⇒ CPPC
, CPPFLAGS
매크로명은 여기에서 다른 의미로 쓰이는 것 같아서 다음 과제부터는 이렇게 안 써야지..
#include <iostream>
char CharUpper(char c)
{
if ('a' <= c && c <= 'z')
return (c - ('a' - 'A'));
return (c);
}
int main(int argc, char **argv)
{
int i;
int j;
std::cout << "0";
(void) argc;
if (!argv[1])
std::cout << "* LOUD AND UNBEARABLE FEEDBACK NOISE *";
for (i = 1; argv[i]; i++)
{
for (j = 0; argv[i][j]; j++)
std::cout << CharUpper(argv[i][j]);
}
std::cout << std::endl;
return (0);
}
원래 42 norminette 규정으로 for문은 사용하지 못하고 while문으로 반복문을 작성했는데 cpp는 규정이 따로 없어서 for문에 익숙해질겸 작성하였음