용어(term)

용어 한국어 의미
Hello World Hello World는 최초로 시작할 때 주로 사용. 101과 비슷한 의미
foo, bar, baz, qux 아무개, 홍길동 등.. 큰 의미를 갖지 않습니다. 프로그래머 커뮤니티에서 코드의 내용에 집중할 수 있도록 큰 의미없이 설정하는 이름입니다.
syntax 구문, 문법 코딩 언어의 문법을 의미합니다.
  • 컴파일러에서: syntax error는 문법적인 오류로 애초에 코드가 수행되지 않습니다. 반대로 수행중에 발생하는 오류는 runtime error라고 합니다.
  • 통신에서: 송수신자가 0일때 OFF, 1일때 ON이라고 정의했다면. 0과 1을 syntax, ON / OFF는 Semantiecs라고 합니다.
comment 주석 동작하지 않는 코드를 의미합니다. 주석은 코드 블럭을 요약하거나, 추가 정보 등을 제공하므로써 가독성을 높이기 위한 방법입니다.
program 순서지 컴퓨터 프로그램도 순서대로 수행합니다.
main 메인 모든 프로그램은 main으로부터 시작합니다. 시작을 의미.
reserved 예약어 코드를 작성할 때, 컴파일러가 특별한 의미로 해석하기로 약속된 언어로 컴파일러가 '맡아둔'이란 의미. 코딩 언어를 배운다는 것은 reserved word를 모두 사용 할 줄 안다는 의미(keyword(x))
통신이나 데이터시트 등에서 (미래를 위해 맡아둔, 그래서) 지금은 쓰이지 않는 공간, 핀, 영역 등으로 흔하게 사용
interface 인터페이스 프로그램(또는 어떤 대상)과 상호작용을 하기 위한 수단 또는 정의, 방법, 도구를 의미합니다.
  • CLI(Command-Line Interface) : 텍스트 기반의 입출력을 가진 시스템
  • GUI(Graphical User Interface) : 그래픽(마우스) 기반의 입출력을 가진 시스템
console 콘솔 CLI 프로그램
Literal 리터럴 프로그래밍에서 상수 표현 방법
ANSI ANSI 미국 국립 표준 협회(민간)(ascii 제정), 국제표준은 ISO

시작하기

기본규칙

#include 

int main()
{
    printf("Hello World!\n");
}

코딩 스타일

코딩 스타일은 띄어쓰기, 들여쓰기, 새 줄과 같은 코드의 문법적인 부분과 직접적인 연관이 없지만, 전체적인 포멧을 제안하여 가독성과 생산성을 올리려는 시도입니다.

언어 단체 표준문서
C GNU Coding Standards https://www.gnu.org/prep/standards/standards.html#Formatting
Java Java Code Conventions https://www.oracle.com/technetwork/java/codeconventions-150003.pdf
python PEP 8 https://peps.python.org/pep-0008/
javascript JavaScript Standard Style https://standardjs.com/
kotlin Kotlin Coding Conventions https://kotlinlang.org/docs/coding-conventions.html

Allman(or BSD) vs. K&R style

Allman(or BSD)
if (condition)
{
    // code block
}
else
{
    // code block
}
K&R
if (condition) {
    // code block
} else {
    // code block
}
표기법 설명 예시 선호
Pascal Case(Upper Camel Case) 각 식별자의 첫 글자를 대문자로
(낙타 등처럼 오르락 내리락)
MyClass, SomeVariable, MyFunction C, Java
Camel Case myClass, someVariable, myFunction
Snake Case 식별자의 구분을 밑줄('_')로
(뱀 처럼 아래로 긴다.)
my_class, some_variable, my_function python
kabab Case 식별자의 구분을 하이픈('-')으로
(케밥 가운데 꼬챙이 낀 것 같다.)
my-class, some-variable, my-function 웹 언어(html, css, javascript)

printf

출력을 나타내는 명령어는 printf입니다. 단, printf의 인자(arguments)로 넘겨주는 문자열에 삽입되는 명령어는 따로 암기가 필요합니다.

접두 규칙은 대부분 영미권의 단어를 차용하지만 그 유래가 그리스, 로마에서 출발 한 것들이 많습니다. 자료를 참고하세요.

printf("> 문자 출력 예제\n");
명령어 의미 기타
%c %C 문자 1개 character
%s %S 문자열 string
%d %D 10진수 decimal
%i %I 10진수 integer
%u %U 부호 없는 10진수 unsigned
%o %O 부호 없는 8진수 octal
%x %X 부호 없는 16진수 HeXa
%e %E 지수표기법 exponential
%% % 부호
\' '
\" "
\\ \
\b 백스페이스 back space
\n 줄바꿈 new line
\r 캐리지(커서) 리턴 return
\t tab

printf % rule

%좌우정렬-공백설정-총자릿수-마침표(.)-소수자릿수-출력기호의 규칙을 갖습니다.

printf("%-7.2f", 1.264);
규칙 옵션 예시 출력예
자릿수 # %7d
%10d
____123
_______123
공백 설정 0 %07d
%7d
0000123
____123
좌우정렬 - %-7d
%7d
123____
____123
소숫점 자릿수 #.#
%7.2f
1234567
___3.14

진법

숫자가 0으로 시작하면 10진법이 아닌 경우를 의미합니다. 0뒤의 문자에 따라서 b(binary)는 2진법 x(hex)는 16진법을 의미하고, 문자가 없는 경우(예:030)은 8진법으로 표기합니다. 많은 컴파일 언어에서 2진법과 16진법을 채용하지만 8진법은 누락되는 경우가 있습니다.

printf("16진법 : %X\n", 0x1A);
진법 표기예 10진법
2진법 0b1001 9
16진법 0x21 33
8진법 030 24

진법에 대한 자세한 이해는 아래 사이트를 참조 합니다.
자유주제 > 진법

Ascii

0~128까지의 숫자를 문자와 1:1대응하여 만든 코드입니다. 알파벳과 일부 특수기호, 특수코드(예:문자열 변경)등이 포함되어있습니다. 다국어지원을 위해서 UniCode를 사용합니다.(~65536)

한글을 표현하려면 최소한 2bytes이상이 필요합니다. Unicode는 저장방식이고, EUC-KR, UTF-8은 표현방식(인코딩 방식) 입니다. 자세한 내용은 여기를 참조하세요.

데이터형

변수 선언(declaration)

변수의 선언(declaration)은 컴파일러에게 앞으로 사용하게 될 메모리를 할당을 요청하고, 그 메모리에 이름을 붙여주는, 등록과정을 의미하며, (준비자세로) 프로그램상으론 아무런 동작을 하지 않습니다. 변수의 이름은 다음을 피해야 합니다.

변수형(DataType)

char c = 'A';
int i = 66;
long l = 99;
float f = 123456789.;	//warning
double d = 123456789.987654321;
크기 정수형 소수형
C Java C/Java
1 bit bool boolean -
1 byte char byte -
2 byte short short/char -
4 byte int, long int float
8 byte long long long double

부호(Signed)

부호를 기록하지 않아도 될 때, 1비트를 절약 할 수 있습니다. 예약어 unsigned를 사용합니다.

unsigned char uc = 127;
1 0 0 1 0 1 1 0 부호비트 ▲ MSB = Most Significant Bit LSB = Least Significant Bit ▲

위 그림은 8 bit 변수를 나타냅니다. 32bit 또는 64bit 데이터타입(Data Type)은 그 만큼의 저장공간을 가질 것입니다. 부호 비트에 1이 저장되어 있다면 음수, 0이 저장되어 있다면 양수를 의미합니다.
 단, 2의 보수로 저장되기 때문에 양수에 부호비트만 변경하면 음수가 되는 것은 아닙니다. 자세한 내용은 2진수를 참조하십시오. 2의 보수를 사용하는 이유는 가산기(덧셈기)로 감산이 가능하기 때문입니다.

sizeof

sizeof 예약어는 해당 변수에 할당된 byte를 반환합니다.

char c;
printf("char: %llu / %llu\n", sizeof(c), sizeof(char));

연산자

기본 연산자 분류

분류 연산자
사칙연산 +, -, *, /, %
대입연산 =, +=, -=, *=, /=, %=, <<=, >>=, &=, |=, ^=
증감연산 ++, --
논리연산 !, &&, ||
비트연산 ~, &, |, ^, <<, >>
비교연산
(부등호)
<, >, <=, >=, ==, !=

연산자 우선순위

우선순위(그룹) 연산자 설명
1 :: 범위 확인
2 -> 멤버 선택
[] 배열 첨자
++, -- 후위 증감
(cast) 형식변경
3 sizeof 크기
++, -- 전위 증감
~ 1의 보수
! not
-/+ 단한 부호
&, * 참조(포인터)
4 -> 멤버 포인터
5 *, /, %  
6 +, -  
7 <<, >> 쉬프트
8 <, >, <=, >= 부등호
9 ==, != 등호
10 &  
11 ^  
12 |  
13 &&  
14 ||  
15 ?: 조건부
=, +=, -=, *=, /=, %/,<<=, >>=, &=, |=, ^=  
throw 예외처리
16 , 쉼표

출처 : Microsoft C++ 도움말, https://docs.microsoft.com/ko-kr/cpp/cpp/cpp-built-in-operators-precedence-and-associativity?view=msvc-170#c-operator-precedence-and-associativity-table

형변환(Typecast)

printf("%f\n", 10 / 3);
printf("%f\n", (float)10 / 3);