| 구분 |
C언어 |
C++ |
| 사용 예 |
- 임베디드 시스템 |
- 게임 개발 |
| - 운영 체제 |
- GUI 애플리케이션 |
| - 시스템 프로그래밍 |
- 웹 서버 |
| - 컴파일러 및 인터프리터 |
- 데이터베이스 소프트웨어 |
| 장점 |
- 간단하고 빠른 성능 |
- 객체 지향 프로그래밍 지원 |
| - 하드웨어와의 밀접한 연관성 |
- 코드 재사용성 및 유지보수 용이 |
| - 작은 메모리 사용 |
- 강력한 표준 라이브러리 |
| - 다양한 플랫폼에서 사용 가능 |
- 템플릿 및 STL 지원 |
| 단점 |
- 객체 지향 프로그래밍 미지원 |
- 복잡한 문법 |
| - 메모리 관리 수동 |
- 컴파일 시간 증가 |
| - 오류 처리 기능 부족 |
- 성능 저하 가능성 (추상화로 인한) |
c언어와 c++언어의 사용 예시와 장,단점을 정리한 표
cout은 모니터라고 생각하면 된다. cout은 #include <iostream>에 있
#include <iostream>
int main()
{
std::cout << "aaaa\n";
return 0;
}
↑ 이렇게 쓴다.
\n과 <<std::endl;은 같지만 \n의 속도가 훨씬 빠르기 때문에(<<std::endl;은 청소까지 해줌) \n을 더 많이 사용한다
| 구분 |
\n |
std::endl |
| 정의 |
새 줄 문자 |
새 줄 문자 + 출력 스트림 플러시 |
| 사용 예 |
std::cout << "Hello\n"; |
std::cout << "Hello" << std::endl; |
| 장점 |
- 성능이 더 빠름 |
- 출력 버퍼를 즉시 비우므로 최신 상태 반영 |
| - 단순하고 직관적임 |
- 디버깅 시 유용함 |
| 단점 |
- 출력 버퍼가 비워지지 않음 |
- 성능 저하 (버퍼링으로 인한) |
| - 출력 내용이 즉시 반영되지 않음 |
- 불필요하게 자주 사용하면 비효율적 |
\n과 <<std::endl;을 비교한 표이다.
::은 c언어에는 없는 연산자이다.
#include <iostream>
int main()
{
std::cout<<"소프트웨어"<<std::endl;
return 0;
} //std동네에 있는 cout
std에 있는 std를 지워서 한번에 지정해주는 방법을 사용할 수도 있다 ↓
#include <iostream>
using namespace std; //네임스페이스로 std 사용, 잘 쓰지 않음
int main()
{
cout<<"소프트웨어"<<endl;
return 0;
} // 확장자 .cpp
위쪽의 방법보다 좀 더 좋은 방법은 아래참고 ↓
#include <iostream>
using std::cout;
using std::endl;//이제부터 cout은 std::cout을 참조하겠다!
int main()
{
cout<<"소프트웨어"<<endl;
return 0;
}
© smilehan의 c++프로그래밍
#include <stdio.h>
int main(void)
{
int num;
printf("숫자 하나를 입력하세요=");
scanf("%d", &num);
printf("입력받은 수는 %d 입니다.\n", num);
return 0;
}
의 코드를 std::을 사용해서 변경
#include <iostream>
int main() {
int num;
std::cout << "숫자 하나를 입력하세요=";
std::cin >> num;
std::cout << "입력받은 수는 " << num << " 입니다." << std::endl;
return 0;
}
c언어로 나이를 키보드로 입력받아 출력받는 프로그램을 만듬
#include <stdio.h> // 입출력을 위한 헤더 파일 포함
int main(void)
{
int age; // 정수형 변수 선언
printf("나이를 입력하세요: "); // 사용자에게 입력 요청
scanf("%d", &age); // 사용자 입력을 age에 저장
printf("당신의 나이는 %d 입니다.\n", age); // 입력받은 나이 출력
return 0; // 프로그램 종료
}
c++언어로 나이를 키보드로 입력받아 출력받는 프로그램을 만듬
#include <iostream> // 입출력을 위한 헤더 파일 포함
int main()
{
int age; // 정수형 변수 선언
std::cout << "나이를 입력하세요: "; // 사용자에게 입력 요청
std::cin >> age; // 사용자 입력을 age에 저장
std::cout << "당신의 나이는 " << age << " 입니다.\n"; // 입력받은 나이 출력
return 0; // 프로그램 종료
}
아래의 코드는 c언어로 만든 식별자/상수/자료형/변수/함수 예제이다.
#include <stdio.h> //printf()함수 원형이 선언되어 있음, 전처리기
int main(void) //콘솔 기반 C프로그램의 시작점
{ //main()함수의 시작
int num1, num2; //변수 선언문, 실행문 보다 먼저 씀
/* 변수명: 영문자(A-Z, a-z), 숫자(0-9), 밑줄(_)로 구성
변수(variable):프로그램이 실행되는 동안 자료를
기억시키기 위한 기억장소의 이름 */
num1=100; //대문자와 소문자는 다른 변수로 인식
num2=-300; //변수에 상수 대입
printf("두 수의 합은 %d입니다.\n",num1+num2);
//표준 라이브러리 함수
return 0;
} //main()함수의 끝
위의 코드를 c++언어로 변경하면
#include <iostream> // 입출력을 위한 헤더 파일 포함
int main() // 콘솔 기반 C++ 프로그램의 시작점
{ // main() 함수의 시작
int num1, num2; // 변수 선언, 실행문보다 먼저 위치해야 함
/* 변수명: 영문자(A-Z, a-z), 숫자(0-9), 밑줄(_)로 구성
변수(variable): 프로그램이 실행되는 동안 자료를
기억시키기 위한 기억장소의 이름 */
num1 = 100; // num1에 100 대입
num2 = -300; // num2에 -300 대입
// 두 수의 합을 출력, std::cout을 사용하여 출력
std::cout << "두 수의 합은 " << (num1 + num2) << "입니다.\n"; // 두 수의 합 출력
return 0; // 프로그램 종료
} // main() 함수의 끝
이렇게 나온다.
이스케이프 시퀀스는 문자열 내에서 특별한 의미를 갖는 문자 조합이다.
아래 표는 일반적으로 사용되는 이스케이프 시퀀스와 그 설명을 정리한 것이다.
| 이스케이프 시퀀스 |
설명 |
| \n |
줄 바꿈 (new line) |
| \t |
수평 탭 (horizontal tab) |
| \\ |
백슬래시 (backslash) |
| \' |
작은따옴표 (single quote) |
| \" |
큰따옴표 (double quote) |
| \r |
캐리지 리턴 (carriage return) |
| \b |
백스페이스 (backspace) |
| \f |
폼 피드 (form feed) |
| \a |
경고음 (alert) |
| \v |
수직 탭 (vertical tab) |
| \0 |
널 문자 (null character) |
정적타입 언어와 동적타입 언어의 차이점
| 특징 |
정적 타입 언어 |
동적 타입 언어 |
| 타입 결정 시점 |
컴파일 시점 |
실행 시점 |
| 타입 선언 |
명시적 타입 선언 필요 |
암시적 타입 선언 (타입 추론) 가능 |
| 에러 발견 |
컴파일 시점에 타입 오류 발견 |
실행 시점에 타입 오류 발견 |
| 성능 |
일반적으로 더 빠름 |
성능이 떨어질 수 있음 |
| 유지보수 |
코드가 명확하고 유지보수가 용이 |
유연성이 있지만 타입 관련 버그 발생 가능 |
| 코드 작성 |
타입 선언으로 인해 코드가 장황해질 수 있음 |
코드가 간결하고 빠르게 작성 가능 |
| 예시 언어 |
C, C++, Java, Rust |
Python, JavaScript, Ruby |
| 장점 |
- 타입 안전성 <br> - 성능 최적화 가능 <br> - IDE 지원 우수 |
- 유연성 <br> - 빠른 프로토타이핑 가능 |
| 단점 |
- 코드 작성 번거로움 <br> - 유연성 부족 |
- 런타임 에러 발생 가능 <br> - 성능 저하 |
○ 자동 형 변환
- 10/4, 10.0/4, 10/4.0, 10.0/4.0
- 1 + 'A' 가 가능할까?
- 자료형이 서로 다른 혼합 연산에서는 기억 장소의 크기가 큰 쪽으로 통일시켜 연산이 이루어짐
- 이것을 자동 형 변환(implicit arithmetic conversions)이라 함
-char(1바이트)형과 int(4바이트)형이 혼합 연산을 하게 되면 char형이 int형으로 변경되어 연산이 되고 결과도 int형으로 나옴
-int형(4바이트)과 double형(8바이트)의 혼합 연산에서는 int형이 double형으로 변경되어 연산이 되고 결과도 double형으로 나옴
- char → unsigned char → int → unsigned int → long → unsigned long → float → double
전처리기는 컴파일하기전에 일어나는 동작이고, #으로 시작한다
○ #define문 : 매크로
- 매크로 또는 매크로 상수는 프로그램 전체에서 하나의 기호 상수를 다른 이름으로 대치시키도록 전처리기에게 알려줌
- 실제 매크로가 호출되면 호출된 자리에 정의된 기호 상수로 대치됨
- `#define 매크로명 상수_또는_문자열`
- `#define PI 3.141592`
- 프로그램 중에 PI를 찾아서 컴파일하기 전에 모두 3.141592로 바꾸어 줌
- 그래서 컴파일되는 소스에는 더 이상 PI는 존재하지 않음
- `#define SIZE 100`
- `char ch[SIZE];` // `char ch[100];`
- `for(i=0;i<SIZE;i++)` // `for(i=0;i<100;i++)`
- 숫자 100을 그냥 쓰는 것 보다는 SIZE라는 매크로명이 더 많은 정보를 주며, SIZE값을 한꺼번에 바꾸기도 편리함
- 매크로명은 모두 대문자, 단어 사이는 언더스코어(_)
- PI, SIZE, ARRAY_SIZE, BUFFER_SIZE
프로그램중에 다른파일을 포함시킬때 사용하는것이 #include이다 ""을 사용하는 경우는 직접만든 헤더파일을 사용할때 ""사용하고 <>은 이미 만들어져 있는 표준헤더파일을 사용할때 <>을 사용한다.
많이 쓰는 언어들의 연산자 비교
| 연산자 |
C |
C++ |
Java |
C# |
JavaScript |
Python |
| 덧셈 |
+ |
+ |
+ |
+ |
+ |
+ |
| 뺄셈 |
- |
- |
- |
- |
- |
- |
| 곱셈 |
* |
* |
* |
* |
* |
* |
| 나눗셈 |
/ |
/ |
/ |
/ |
/ |
/ |
| 나머지 |
% |
% |
% |
% |
% |
% |
| 증가 |
++ |
++ |
++ |
++ |
++ |
+= 1 |
| 감소 |
-- |
-- |
-- |
-- |
-- |
-= 1 |
| 대입 |
= |
= |
= |
= |
= |
= |
| 비교 (==) |
== |
== |
== |
== |
== |
== |
| 비교 (!=) |
!= |
!= |
!= |
!= |
!= |
!= |
| 논리 AND |
&& |
&& |
&& |
&& |
&& |
and |
| 논리 OR |
` |
|
` |
` |
|
` |
| 비트 AND |
& |
& |
& |
& |
& |
& |
| 비트 OR |
` |
` |
` |
` |
` |
` |
| 비트 XOR |
^ |
^ |
^ |
^ |
^ |
^ |
| 비트 NOT |
~ |
~ |
~ |
~ |
~ |
~ |
| 시프트 왼쪽 |
<< |
<< |
<< |
<< |
<< |
<< |
| 시프트 오른쪽 |
>> |
>> |
>> |
>> |
>> |
>> |
C와 C++ 언어의 문법을 설명하는 코드 예제를 주석과 함께 작성해드리겠습니다. 아래 코드는 식별자, 상수, 자료형, 변수, 전처리기, 연산자를 포함하고 있습니다.
c
#include <stdio.h> // 표준 입출력을 위한 헤더 파일 포함
// 상수 정의
#define PI 3.14 // PI라는 식별자에 3.14라는 값을 상수로 정의
// 메인 함수: 프로그램의 진입점
int main() {
// 변수 선언: int형 변수 a와 b, float형 변수 area
int a, b; // 정수형 변수 a와 b 선언
float area; // 실수형 변수 area 선언
// 사용자로부터 두 정수 입력 받기
printf("두 정수를 입력하세요: ");
scanf("%d %d", &a, &b); // 입력된 값을 a와 b에 저장
// 사각형의 면적 계산: area는 두 변 a와 b의 곱
area = a * b; // area에 a와 b의 곱을 저장
// 결과 출력
printf("사각형의 면적은: %f\n", area); // 면적을 실수형으로 출력
// 원의 면적 계산: area에 PI와 a의 제곱을 곱하여 저장
area = PI * a * a; // PI와 a의 제곱을 곱하여 면적 계산
// 결과 출력
printf("반지름이 %d인 원의 면적은: %f\n", a, area); // 면적을 출력
return 0; // 프로그램 종료
}
코드 설명
식별자: PI, a, b, area 등이 식별자로, 변수나 상수를 식별하는 이름입니다.
상수: #define PI 3.14로 정의된 상수로, 프로그램 내에서 변경되지 않는 값을 나타냅니다.
자료형: int와 float는 변수의 데이터 타입을 정의합니다. int는 정수를, float는 실수를 저장합니다.
변수: a, b, area는 데이터를 저장하는 공간으로, 선언된 자료형에 따라 값을 저장할 수 있습니다.
전처리기: #include <stdio.h>와 #define은 전처리 지시어로, 컴파일러에게 특정 작업을 수행하도록 지시합니다.
연산자: * (곱하기), = (대입), + (더하기) 등의 연산자가 사용되어 계산을 수행합니다.
이 코드는 C와 C++ 모두에서 사용될 수 있으며, 기본적인 문법 요소들을 잘 보여줍니다. 추가적인 질문이 있다면 언제든지 말씀해 주세요!