본문 바로가기
C++

[C++ 프로그래밍] 2주차 C문법 정리1

by heeaeeeee 2023. 9. 14.

1. Visual Studio에서 자동으로 생성되는 소스

2. C, C++, C#, JavaScript, Java, Python 언어 모니터로 출력하는 방법을 비교해서 표로 정리

프로그래밍 언어 출력 방법
C printf("Hello World!\n");
C++ std::cout << "Hello World!" << std::endl;
C# Console.WriteLine("Hello World!");
JavaScript console.log("Hello World!");
Java System.out.println("Hello World!");
Python print("Hello World!")

3. C와 C++의 차이

#include <iostream> //C++
#include<stdio.h> //C
int main(void)
{
    std::cout << "Hello World!\n"; //C++
    printf("Hello World!\n"); //C
    return 0;
}​

4. C++에서 namespace란?

코드의 특정 부분을 구분하여 식별자(변수, 함수, 클래스 등)의 이름 충돌을 방지하는 방법입니다.

네임스페이스를 사용하면 동일한 이름의 식별자가 다른 영역(scope)에서 정의되어도 서로 간섭하지 않습니다.

5. C++에서 개행하는 방법1

#include <iostream>
int main(void)
{
    std::cout << "Hello" << std::endl; //std::endl과 \n은 같음
    std::cout << "Hello1" << std::endl;
    return 0;
}​

6. C++에서 개행하는 방법2

#include <iostream>
using namespace std;
//네임스페이스로 std 사용, 잘 쓰지 않음
int main(void)
{
    cout << "Hello" << endl;
    cout << "Hello1" << endl;
    return 0;
}​

7. C++에서 개행하는 방법3

#include <iostream>
using std::cout; //더 좋은 방법
using std::endl;
//이제부터 cout은 std::cout을 참조하겠다!
int main(void)
{
    cout << "Hello" << endl;
    cout << "Hello1" << endl;
    return 0;
}​

8. 입출력 스트림 객체 cout, cin

#include <iostream>
using std::cout;
using std::cin;
int main(void)
{
    int input;
    cin >> input;
    cout << input;
    return 0;
}​

9. 나이를 입력받아 출력하는 소스

#include <iostream> // iostream 헤더 파일을 포함합니다. 이 헤더 파일은 입출력 관련 기능을 제공합니다.
using std::cout;
using std::cin;
int main(void) // 프로그램의 시작점인 main 함수를 정의합니다.
{
    int input; // 사용자의 나이를 저장할 변수 age를 선언합니다.
    cout << "나이를 입력하세요: "; // 사용자에게 나이를 입력하라는 메시지를 출력합니다.
    cin >> input; // 사용자로부터 나이 입력을 받습니다. cin은 콘솔에서 입력을 받는데 사용됩니다.
    cout << "당신의 나이는 " <<input<<"살 입니다."; // 입력받은 나이 정보를 출력합니다.
    return 0; // 프로그램이 정상적으로 종료되었음을 시스템에 알립니다.
}​

10. 여러 변수 값 출력(printf vs cout)

#include <iostream>
#include <stdio.h>
using namespace std;
int main(void)
{
    int a, b, c;
    a = 100;
    b = 200;
    c = a + b;
    printf("%d, %d, %d\n", a, b, c); //C, 함수
    cout << a << ',' << b << ',' << c; //C++, 객체
    return 0;
}​

11. 토큰(token) 과 구두점

12. 구두점(punctuator) : 토큰을 구분

13. C, C++, C#, JavaScript, Java, Python 언어에서 [ ] , { } , ( ) 사용 용도

언어 [ ] { } ( )
C 배열 인덱싱에 사용됩니다. 코드 블록을 정의하는데 쓰입니다. 함수 호출, 연산자 우선순위 제어 등에 사용됩니다.
C++ 배열 인덱싱, 템플릿 인자 지정 등에 사용됩니다. 코드 블록을 정의하거나, 객체 초기화에 사용됩니다. 함수 호출, 연산자 우선순위 제어, 타입 변환 등에 사용됩니다.
C# 배열과 리스트 인덱싱 및 속성(Property) 접근기호로 활용되며 일부 메서드 선언에서 반환형식으로 활용되기도 합니다. 코드블럭 혹은 객체 초기화를 위해 활용되며 일부 메서드 선언에서 입력 파라미터 타입으로 활용되기도 합니다. 함수 호출과 연산자 우선순위 제어 그리고 일부 메서드 선언에서 입력 파라미터 타입으로 활용되기도 합니다.
JavaScript 배열 인덱싱, 객체 프로퍼티 접근 등에 사용합니다. 또한 배열 리터럴을 정의하는데도 쓰입니다. 코드 블록을 정의하거나, 객체 리터럴을 정의하는데도 쓰입니다. 함수 호출, 연산자 우선순위 제어 등에 사용됩니다.
Java 배열 인덱싱에 사용합니다. 코드 블록을 정의하는데 쓰입니다. 함수 호출, 연산자 우선순위 제어 등에 사용합니다.
Python 리스트와 딕셔너리 인덱싱 및 슬라이싱에 주로 쓰입니다. 코드 블록을 정의하는데 쓰입니다. 함수 호출과 튜플 생성 그리고 연산자 우선순위 제어를 위해 쓰입니다.

14. 예약어(reserved word, keyword)

15. 키워드와 대응하는 매크로(macro)

16. 식별자/상수/자료형/변수

17. 식별자/상수/자료형/변수/함수 C 소스 예제를 C++ 소스로 변경  

//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> // iostream 헤더 파일을 포함합니다. 이 헤더 파일은 입출력 관련 기능을 제공합니다.
int main(void)
{ // 프로그램의 시작점인 main 함수를 정의합니다.
    int num1, num2; // 두 개의 정수형 변수를 선언합니다.
    num1 = 100; // num1 변수에 100을 할당합니다.
    num2 = -300; // num2 변수에 -300을 할당합니다.
    std::cout << "두 수의 합은 " << (num1 + num2) << "입니다.\n";
    // cout 객체와 '<<' 연산자를 이용해 콘솔에 출력하고, 덧셈 결과도 출력합니다.
    return 0; // 프로그램이 정상적으로 종료되었음을 시스템에 알립니다.
}

18. 카멜 표기법(camel case)

  • 여러 단어를 연결하여 변수, 함수, 클래스 등의 이름을 지을 때 사용하는 방식입니다. 각 단어의 첫 글자를 대문자로 쓰는 것이 특징이며, 이렇게 하면 별도의 구분자 없이도 각 단어를 쉽게 구별할 수 있습니다.
  • 카멜 표기법에는 두 가지 주요한 변형이 있습니다.
    • Lower Camel Case (소문자 카멜 표기법): 첫 번째 단어는 소문자로 시작하고, 그 다음부터 시작하는 모든 단어는 대문자로 시작합니다. 예를 들면 firstName, isReady, printUserDetails 등입니다.
    • Upper Camel Case (대문자 카멜 표기법): 모든 단어가 대문자로 시작합니다. 이 방식은 주로 클래스 이름에 사용됩니다. 예시로 Person, BankAccount, HttpResponse 등이 있습니다.
  • 카멜 표기법은 코드의 가독성을 높여주고 변수나 함수의 역할을 명확히 나타내므로 프로그래밍에서 널리 사용됩니다.

19. 리터럴(literal)

※ 문자 리터럴은 작은따옴표, 문자열 리터럴은 큰따옴표

20. 이스케이프 시퀀스(확장 문자열)

21. 이스케이프 시퀀스를 사용하는 프로그램 언어

1. C

2. C++

3. Java

4. JavaScript

5. Python

6. Ruby

7. Swift

8. PHP

9. Perl

10. C#

11. Bash (shell scripting)

12. Rust

22. 문자열(string) 리터럴

23. C++, C#, C, 자바스크립트, 자바, 파이썬 언어에서 사용하는 자료형을 표로 정리

자료형 C++ C# C JavaScript Java Python
int(정수) O (int) O (int) O (int) X, 대신 Number 또는 BigInt를 사용합니다. O (int) O, 파이썬의 int는 동적으로 크기가 조정됩니다.
long(긴 정수) O (long long int 등) O (long) O (long int 등) X, 대신 Number 또는 BigInt를 사용합니다. O(long) O, 파이썬의 int로 충분합니다.
short
(짧은 정수)
O(short) O(short) O(short)   O(short)  
float(실수값)   O(float)   O(float)   X, 대신 Number를 사용합니다.
double
(더블 실수값)
  O(double)   O(double)   X, 대신 Number를 사용합니다.
char(문자 혹은 작은 정수값)   O(char)   O(char)   X, 대신 String을 사용하거나 charCodeAt 메소드로 ASCII 값을 가져옵니다.
boolean(논리 값: 참/거짓 )   O(bool or _Bool in C99+ )   X    
string(문자열)   X   X    

24. 변수를 선언하지 않고 사용할 수 있는 프로그래밍 언어

1. JavaScript

2. Python

3. Ruby

4. PHP

5. Perl

6. Shell Scripting languages (Bash, sh 등)

7. Lua

8. Groovy

25.  implicit arithmetic conversions(자동 형변환)를 제공하는 프로그래밍 언어

1. C/C++

2. Java: Java

3. Python

4. JavaScript

5. PHP

6. Swift

26. 프로그래밍 언어에서 implicit는?

프로그래밍 언어에서 "implicit"는 '암시적'이라는 뜻으로, 주로 코드에서 명시적으로 표현되지 않지만 프로그래밍 언어의 동작 규칙에 따라 자동으로 수행되는 것을 가리킵니다.

예를 들어 객체 지향 프로그래밍에서 클래스나 인터페이스의 메소드를 구현할 때 'implicit' 키워드를 사용하여 암시적 구현을 나타내기도 합니다. 이 경우 'implicit'는 메소드가 해당 클래스나 인터페이스의 일부임을 명시하지 않아도 된다는 것을 의미합니다.

그러나 이런 암시적인 동작들은 때때로 코드의 가독성을 저하하거나 예상치 못한 결과를 초래할 수 있으므로 주의해야 합니다. 따라서 가능한 한 코드 내에서 작업이 명확하게 표현되도록 하는 것이 좋습니다.

27. c언어의 연산자를 우선순위로 표로 정리

우선순위 연산자 설명
1 () 괄호
2 ++, -- 전치 증가/감소
  +, - (단항) 단항 플러스/마이너스
  !, ~ 논리 NOT, 비트 NOT
3 *, /, % 곱셉, 나눗셈, 나머지
4 +, -(이항) 덧셉, 뺄셈
5 <<,>>  
6 <,<=,>,>= 작다, 작거나 같다, 크다, 크거나 같다
7 == , != 동등함, 동등하지 않음
8 & 비트 AND
9 ^ 비트 XOR
10 | 비트 OR
11 && 논리 AND
12 || 논리 OR
13 = , += , -= , *= , /= , %= , <<= , 
>>= , &= , ^= , |=
대입 연산자들 (우변에서 좌변으로 계산)
14 ?: 조건 연산자 (삼항 연산자)
15 , 시퀀스 포인트(sequence point), 주로 여러 변수를 한 줄에 선언할 때 사용합니다.

28. 증가, 감소 연산자

include <stdio.h>
int main(void)
{
    int a = 10, b = 10, c = 20, d = 20; // 변수 a, b, c, d를 각각 10, 10, 20, 20으로 초기화합니다.
    int ap, bp, cm, dm; // 변수 ap,bp ,cm ,dm을 선언합니다.
    ap = ++a; // 전치 증가 연산자를 사용하여 a의 값을 먼저 증가시킨 후 그 값을 ap에 할당합니다.
    printf("a=%d, ap=%d\n", a, ap); // 이제 a와 ap 모두 값이 '11'입니다.
    bp = b++; // 후치 증가 연산자를 사용하여 b의 현재 값을 bp에 할당한 후 b의 값을 증가시킵니다.
    printf("b=%d,bp=%d\n",b,bp); // 이제 b는 '11'이고 bp는 '10'입니다.
    cm=--c; // 전치 감소 연산자를 사용하여 c의 값을 먼저 감소시킨 후 그 값을 cm에 할당합니다.
    printf("c=%d ,cm=%d\n",c ,cm); // 이제 c와 cm 모두 값이 '19'입니다.
    dm=d--; // 후치 감소 연산자를 사용하여 d의 현재 값을 dm에 할당한 후 d의 값을 감소시킵니다.
    printf("d=%d,dm%d\n", d,dm );// 이제 d는 '19', dm은 '20'입니다.
    printf("%d\n" ,dm++ );
    // 출력하기 전에 dm값(현재값:20)을 출력하고 나서 dm값을 하나증가시킵니다. 따라서 출력되는 값은 "20"이며
      함수 호출 직후 dm은 '21'이 됩니다.
    printf("%d\n" ,++dm);
    // 출력하기 전에 먼저 dm값(현재값:21)을 하나증가 시키고 그것을 출력합니다. 따라서 출력되는 값은 "22"입니다.
    return 0;
}

29. cast 연산자

#include <iostream>
using std::cout;
int main(void)
{
    int x = 10, y = 4;
    cout << (double)10/4<<'\n'; //실행결과 2.5
    cout << x/(double)y<<'\n'; //실행결과 2.5
    cout << (double)x/(double)y<<'\n'; //실행결과 2.5
    cout << (double)(x/y)<<'\n'; //소괄호가 cast 연산자보다 우선순위가 높아 실행결과 2
    return 0;
}

 

 

C++ 강의 자료 참고했습니다.