일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 도커
- 깃
- c# 추상 클래스
- 플러터
- 유니티
- git
- Data Structure
- jupyter
- c언어
- C언어 포인터
- Flutter
- docker
- jupyter lab
- Houdini
- C++
- C# delegate
- gitlab
- c# winform
- Unity
- Python
- c#
- vim
- c# 윈폼
- dart 언어
- HTML
- 포인터
- Algorithm
- github
- 구조체
- 다트 언어
- Today
- Total
목록전체 글 (507)
nomad-programmer
EC2 (Elastic Compute Cloud)는 AWS에서 가장 기본적이면서 널리 쓰이는 인프라이다. EC2는 인터넷에 연결된 가상 서버를 제공해준다. EC2를 사용해야 하는 이유는 효율성과 비용 절감에 있따. EC2는 클릭 몇 번으로 서버를 생성할 수 있기 때문에 실제 서버를 구축하는 것보다 훨씬 간편하고 효율적이다. 또한, 사용한 만큼만 요금을 지불하면 되므로 비용도 절감할 수 있다. EC2 인스턴스는 우리가 일반적으로 보는 PC나 서버와 똑같은 형태이며 Linux나 Windows가 설치되어 있다. 가상 서버이기 때문에 모니터에는 직접 연결할 수 없고 터미널 또는 원격 데스크톱 연결로 접속해야 한다. 시작(Start): EC2 인스턴스를 시작한다. 운영체제가 부팅되고 사용할 수 있는 상태이다. 시..
Git Push rejected: Push to origin/master was rejected jetbrains 에디터에서 git을 사용하다보면 git push rejected 라는 에러로 push가 되지 않을 때가 있다. 이것은 원격 저장소에 커밋 변화가 생겼는데 그 저장소에 push를 하려고 하다보니 이렇게 된 것이다. 그래서 pull로 컷밋 을 가져오려고하면 이 또한 에러나 발생하여 명령 실행이 안된다. 해결 방법: 1. 현 프로젝트의 최상위 디렉토리로 간다. 2. 마우스 우측 클릭을 하여 'Git Bash here' 메뉴를 클릭한다. 3. 아래의 명령을 실행한다. git pull origin master --allow-unrelated-histories 4. edit 메시지 작성 5. 다시 Je..
[] 연산자를 사용한 int형 배열 요소 접근 #include int main() { int i_arr[6] = { 10, 20, 30, 40, 50, 60 }; printf("%d %d %d %d %d %d\n", i_arr[0], i_arr[1], i_arr[2], i_arr[3], i_arr[4], i_arr[5]); printf("%d %d %d %d %d %d\n", (&i_arr[2])[-2], (&i_arr[2])[-1], (&i_arr[2])[0], (&i_arr[2])[1], (&i_arr[2])[2], (&i_arr[2])[3]); return 0; } // 결과 /* 10 20 30 40 50 60 10 20 30 40 50 60 */ &i_arr[2] 를 중심으로 +, - 연산을 하..
c_arr 변수의 메모리 주소가 12ff7c 라고 가정한다. #include void main() { char c_arr[2][2] = {'A', 'B', 'C', 'D'}; printf("%x %x %x %x\n", &c_arr[0][0], c_arr, c_arr[0], c_arr[1]); printf("%x %x %x %x\n", &c_arr[0][0]+1, c_arr+1, c_arr[0]+1, c_arr[1]+1); } // 결과 /* 12ff7c 12ff7c 12ff7c 12ff7e 12ff7d 12ff7e 12ff7d 12ff7f */ &c_arr[0][0]는 char형 1바이트의 주소를 의미하며 여기에 +1을 한 것은 1바이트의 주소를 덧셈하라는 의미이다. c_arr은 char형 배열 2*2의..
c_arr 변수가 0x12ff78의 주소를 사용한다고 가정한다. 형 변환 연산자를 사용하여 상수를 char형 주소로 변환한 후 * 연산자를 사용하여 char형 1바이트에 접근한다. #include int main() { char c_arr[5] = { 'A', 'B', 'C', 'D', 'E' }; printf("%c %c %c %c %c\n", *(char*)0x12ff78, *(char*)0x12ff79, *(char*)0x12ff7a, *(char*)0x12ff7b, *(char*)0x12ff7c); return 0; } // 결과 /* A B C D E */ 정수 0x12ff78 ~ 0x12ff7c에 (char*) 형 변환 연산을 사용하여 char형 주소로 변환한 후 *를 붙여 메모리 자체(값)를..

비쥬얼 스튜디오 코드 편집기를 후디니 기본 외부 편집기로 지정한 후 VSCode의 vex extension을 설치하면 매우 편리하다. 그래서 이것을 소개하고자 한다. 먼저, houdini.env 파일을 열어 외부 편집기 변수를 설정한다. // Windows C:\Users\\Documents\houdini18.0\houdini.env // Linux /home//houdini18.0/houdini.env 이렇게하면, 외부 편집기로 Visual Studio Code 를 쓰면서 VEX의 함수 및 상수들을 자동완성 기능으로 편집할 수 있다.

#include void main() } int n = 100; // 12ff7c printf("%x\n", &n); printf("%d %d\n", n, *&n); } // 결과 /* 12ff7c 100 100 */ int형 변수 n의 주소가 12ff7c라면 시작 주소는 &n이고, 이 주소에 *를 붙여 *&n 은 변수 n의 4바이트 크기의 메모리를 의미하게 된다. 값은 100이다. *&n 은 n과 같은 메모리의 이름이라고 해도 무방하다. 주소 12ff7c ~ 12ff7f의 4바이트 메모리 이름은 n과 *&n 이다. & 연산자와 * 연산자는 상반된 개념을 가지고 있다. & 연산자는 변수(메모리 이름) 앞에서만 사용하고 * 연산자는 주소 앞에서만 사용한다. 예를 들어 *N과 가이 사용하면 N은 주소이고 &..
형 변환은 암묵적인 형 변환과 명시적인 형 변환이 있다. 암묵적인 형 변환은 컴파일러에 의해 자동으로 변환되고 명시적인 형 변환은 () 연산자를 사용하여 변환한다. char형 변수(1바이트)를 int형 변수(4바이트)에 대입하는 경우 암묵적인 형 변환(자동 형 변환)이 수행된다. 작은 자료형을 큰 자료형으로 변환하는 경우 컴파일러는 자동으로 형 변환을 수행한다. 에를 들어 (char)는 char형으로 자료형을 변환하라는 의미이고 (char*)는 char형 주소로 자료형을 변환하라는 의미이다. #include int main() { char c = 'A'; printf("%x %x %x\n", &c, (char*)&c, (int*)&c); printf("%x %x %x\n", &c+1, (char*)&c+..
C로 프로그램을 만든다면 아마 성능과 규모 확장에 대해 신경이 많이 쓰일 것이다. 코드를 컴파일하기 위해 gcc를 사용한다면 다음과 같은 다른 GNU 도구들을 살펴볼 필요가 있다. gdb gdb(GNU Project Debugger)를 사용하면 컴파일된 프로그램을 실행하는 동안 코드를 조사할 수 있다. 성가신 버그를 추적하고 싶을 때 이 도구는 매우 유용하다. gdb는 명령행에서 직접 사용할 수 있고 Xcode나 여타 다른 통합 개발 환경에서 사용할 수 있다. https://www.gnu.org/software/gdb/ GDB: The GNU Project Debugger GDB: The GNU Project Debugger [bugs] [GDB Maintainers] [contributing] [cur..
gcc는 매우 많은 기능을 갖고 있어서 만들어내는 코드를 매우 다양하게 제어할 수 있다. 최적화 gcc는 코드 성능을 아주 많이 높일 수 있다. 루프를 반복할때마다 변수에 값은 값을 대입하는 코드가 있으면 이런 코드를 루프 밖으로 빼낸다. 단지 몇 군데에서만 사용하는 작은 함수가 있다면 이 함수를 인라인 함수(Inline Function)로 바꾸고 호출하는 코드에 직접 집어 넣는다. 매우 다양한 최적화를 할 수 있지만, 대부분의 최적화 기능은 기본값으로는 해제되어 있다. 최적화하려면 컴파일하는 데 많은 시간이 걸리므로 코드를 개발하는 동안에는 컴파일 시간을 줄이기 위해 최적화 기능을 끄는 편이 좋다. 코드를 배포할 준비가 되면 여러 최적화 기능을 활성화하면 된다. 옵션 설명 -O gcc 명령에 -O 플래..
코드는 언제나 테스트되어야 한다. 테스트를 자동화하면 개발이 훨씬 수월해진다. C 프로그래머가 사용할 수 있는 테스트 프레임워크는 매우 많다. 그 중 AceUnit이라고 불리는 프레임워크도 있다. http://aceunit.sourceforge.net/ AceUnit AceUnit Latest release version: aceunit-0.12.0 What is AceUnit? AceUnit (Advanced C and Embedded Unit): a comfortable C code unit test framework. AceUnit is JUnit 4.x style, easy, modular and flexible. AceUnit can be used in resource constraint env..
sizeof 연산자는 데이터가 얼마나 많은 메모리 공간을 차지하는지 알려준다. 그런데 어떤 "범위의 값"을 가질 수 있는지 알고 싶으면 어떻게 해야 할까? 예를 들어 컴퓨터에서 int형이 4바이트를 차지한다고 알고 있을 때, 저장할 수 있는 가장 큰 값은 무엇일까? 아니면 가장 작은 음의 값은? 차지하는 바이트 수로 크기를 계산할 수 있다만 어려울 수 있다. 대신 "limits.h" 헤더 파일에 정의된 매크로를 사용할 수 있다. long형 변수가 저장할 수 있는 가장 큰 값은 LONG_MAX 매크로에 정의되어 있고 short형 변수가 저장할 수 있는 가장 작은 값은 SHRT_MIN을 사용하면 알 수 있다. 다음 코드는 int와 short가 저장할 수 있는 범위를 보여준다. #include #include..