반응형 프로그래밍/C,C++,C#15 [C, C++] 배열과 포인터 차이 (feat. array to pointer decay) 먼저 아래의 코드를 보면 변수 a와 b는 같은 주소를 가르킨다.#include int main() { int a[5] = { 1, 2, 3, 4, 5 }; int* b = a; printf("a : %d\n", a); printf("b : %d\n", b); printf("a(pointer address) : %p\n", a); printf("b(pointer address) : %p\n", b); return 0;}/*a : 6422016b : 6422016a(pointer address) : 000000000061FE00b(pointer address) : 000000000061FE00*/ 그래서 "배열을 가진 변수의 only 이름은 배열의 첫번째 주소를 가진다... 프로그래밍/C,C++,C# 2024. 7. 23. [C,C++,C#] 구조체 padding 제거(feat. 구조체 크기 계산) 이전 글에서 구조체의 크기가 멤버 변수보다 크게 잡히는 현상을 확인했다. 2023.06.04 - [프로그래밍/C,C++,C#] - [C,C++,C#] 구조체 메모리 크기 계산 [C,C++,C#] 구조체 메모리 크기 계산 C언어를 하면 구조체를 초반부에 배우는데, 좀 더 깊게 들어가 본다. 아래 코드의 결과는? #include struct Temp{ double a; int b; char c; }; int main() { struct Temp temp; printf("struct size = %ld\n", sizeof(temp)); return 0; } park-duck.tistory.com 해결방법은 크기가 작은 멤버변수 순서로 선언하는 것이었는데, 그렇다고 char, double 순서로 놓는다고 해서 .. 프로그래밍/C,C++,C# 2023. 6. 4. [C,C++,C#] 구조체 메모리 크기 계산 C언어를 하면 구조체를 초반부에 배우는데, 좀 더 깊게 들어가 본다. 아래 코드의 결과는? #include struct Temp{ double a; int b; char c; }; int main() { struct Temp temp; printf("struct size = %ld\n", sizeof(temp)); return 0; } 결과는 16이다. 8(double) + 1(char) + 4(int) = 13으로 계산하였다면 잘못 알고 있는 것이다. 8로 기준을 잡고 순서대로 생성과정을 설명하자면, 1. double이 들어왔으니 8byte를 생성+8byte 할당 (구조체 총 크기: 8, 남은 공간: 0/8) 2. int가 들어왔으니 8byte를 생성+4byte 할당 (구조체 총 크기: 16, 남은 공.. 프로그래밍/C,C++,C# 2023. 6. 4. [C,C++,C#] 전처리 ##연산자 C계열에 ##연산자가 있다. ##의 의미는 "이어준다"라는 의미이다. 전처리이기 때문에 치환을 하고 컴파일을 하기 때문에 가능하다. 아래는 예제코드와 결과이다. 배열을 써서 for문을 사용하여 초기화하여도 되나, 배열을 사용하면 안 될 때가 있을 시(있는진 모르겠지만) 이런 방식도 있다. #define MAKE_VAR(n) int var_##n = 100+n; #define VAR_PRINT(n) printf("%d\n",var_##n); #include int main() { for(int i=0;i 프로그래밍/C,C++,C# 2023. 6. 4. [C] 공용체(union) 변수 사용 (feat. 콜론 연산자) 제목에서 알 수 있다시피, 메모리를 공유하는 변수가 존재한다. 만약 0b00010100(20)이라는 숫자에서 bit 4번째 숫자만 0으로 바꾸고 싶다면? 비트마스킹을 이용하여 0b11101111을 and 연산을 할 수 있다. 상황에 따라 인덱스를 접근하는 함수를 만들고, 어려운 변수 값을 집어넣고... 연산하고... 이게 한눈에 보기 어렵다는 것이다 -> 가독성이 떨어짐 공용체를 사용하면 좀 더 보기 쉽게 사용이 가능하다. (이외에 임베디드쪽에서 ON/OFF 식의 센서 값을 모아서 관리하거나, 프로토콜 프레임 등 규칙성이 있는 정보를 관리하는데 효율적으로 사용된다) 아래는 소스코드. #include typedef union{ unsigned char BYTE; struct{ unsigned char bi.. 프로그래밍/C,C++,C# 2023. 4. 7. [C/C++] 간편하게 LOG 남기기(feat. 가변인자) C언어에 가변인자라는 개념이 존재하는데 파이썬에서 *args 또는 **kargs와 같은 개념이라 생각할 수 있다. 백문이 불여일타 사용환경 : debian gcc (컴파일러에 따라 조금씩 다를 수 있으니 참고) #include #define LOG(msg, ...) printf("%s파일에서 %s함수에서 %d번째 줄 메시지 : " msg "\n",__FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__) void main(){ LOG("message %d %f %s",999, 3.14, "Hello"); } 보통 디버깅을 위한 LOG문을 위와 같이 매크로함수로 정의하여 사용한다. (매크로 함수뿐만 아니라 일반적인 함수에서도 사용이 가능하다) printf를 사용하면 사용할 때마.. 프로그래밍/C,C++,C# 2023. 3. 29. [Unity] Google Play Console에서 광고 ID 사용을 선언해야합니다. 게임 개발을 한 번 체험하고자 조코딩을 보면서 Flappy Bird Clone을 따라하고 있다. 2022년 영상이었는데 그새 또 뭐가 많이 바껴서 ... 구글링하고있다. 최근 영상이라 안하길 바랬지만 ㅠㅠ 두가지를 구글링했는데 하나는 SDK API LEVEL이었고 => 영상에서는 관리자권한으로 실행하면 된다지만 안되었고 SDK를 직접 설치하여 옮겨줘야했다. 나머지 하나는 무슨 광고 ID 선언을 하라는 오류였다. 영상은 api level이 30이였는데 딱 31부터 뭔 정책이 바뀌면서 뭐를 뭐라뭐라 ... 아래는 경고내용이다. 해결방법은 메니페스트에 퍼미션을 추가해주면된다. 프로그래밍/C,C++,C# 2022. 11. 12. [C#.NET] 폼 최대창으로 로드하기(창 넓이, 높이 값 구하기) C# .NET 최대창으로 열면서 창 넓이/높이 구하기 듀얼 모니터면은 창은 최대화되어 하나의 모니터를 잡아먹지만 값은 두대의 값을 가져오더라... using System.Windows; using System.Windows.Forms; namespace Test { public partial class Form1 : Form { public Form1() { InitializeComponent(); //FormBorderStyle = FormBorderStyle.None; //최대, 최소, 닫기버튼 WindowState = FormWindowState.Maximized; //최대화 double width = SystemParameters.VirtualScreenWidth; //넓이 double heigh.. 프로그래밍/C,C++,C# 2022. 9. 28. [C# .Net] FlowLayoutPanel Dock Fill 사라짐 해결 FlowLayoutPanel, TableLayoutPanel 등은 Dock이 적용되는 방식이 좀 다르다. 그래서 일반적으로 생각하는 Dock으로 아무리 설정하더라도 Controller가 사라지거나, 사이즈가 최솟값이 되거나 하는 오류가 나타날 수 있다. 아래는 Form아래에 FlowLayoutPanel을 Dock - Fill로 설정하여 채웠다. 그 안에 Button 하나를 위치한뒤 Button의 Dock의 값을 Fill로 바꿔본다. 그 상태 그대로 Button을 하나 추가해본다. Dock의 값을 Fill로 지정했던 버튼이 다시 생겨났다. 이것은 말했다싶이 FlowLayoutPanel의 Dock적용방법이 조금 다르다. 일반적인 부모 컴포넌트를 Docking 하는 것과 달리 Dock을 설정한 컴포넌트들은 D.. 프로그래밍/C,C++,C# 2022. 7. 12. [C#] 가장 간단한 Json사용 0. [도구] - [NuGet 패키지 관리자] - [솔루션용 NuGet 패키지 관리]에서 "Newtonsoft.Json"을 설치 1. Json형 String -> Object using Newtonsoft.Json; using System; namespace csharptest { class Program { static void Main(string[] args) { dynamic obj = JsonConvert.DeserializeObject("{ 'name': 'Park', 'nick': 'Duck'}"); string name = obj.name; string address = obj.nick; Console.WriteLine(name); Console.WriteLine(address); } } .. 프로그래밍/C,C++,C# 2022. 7. 5. [C# .NET] 시리얼포트 리스트 생성(feat. ComboBox) [장치 관리자]에 가면 현재 내 컴퓨터에 연결되어 있는 시리얼 포트(Serial Port)들이 나열되어있다. C# Winform에서 콤보박스로 표현해보자. (매우 간단) 먼저 연결되어 있는 Serial들을 불러오는 코드는 아래와 같다. string[] serial_list = SerialPort.GetPortNames(); string 배열로 값들이 불러와진다. 그럼 이쁘게 콤보박스에 담아본다. Serial port는 항상 바뀔 수 있는 데이터들이기에 리스트를 불러들이는 때는 콤보 박스를 드롭 다운할 때이다. Form 생성자 또는 초기화 함수 등에서 드롭다운 이벤트를 추가한다. (콤보박스의 이름은 cb_serial_port이며 이벤트 함수는 cb_serial_portDropDownEvent이다) publ.. 프로그래밍/C,C++,C# 2022. 7. 4. [C++/C] C++에서 C파일 호출하여 컴파일(LNK2001, LNK1120 오류) feat. 맹글링(Mangling) C++에서 C파일을 호출하여 컴파일하면 아래와 같은 에러가 발생하는데 테스트해본다. 오류LNK2001확인할 수 없는 외부 기호 "int __cdecl testFunctionC(void)" (?testFunctionC@@YAHXZ) 오류LNK11201개의 확인할 수 없는 외부 참조입니다. 먼저 C++ 프로젝트를 생성하여 main.cpp, func.h, func.c를 생성한다. 생성한 - main.cpp #include"func.h" #include int main(void){ std::cout 프로그래밍/C,C++,C# 2022. 5. 5. 이전 1 2 다음 반응형