inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

* (asterisk) 가 초기화문에서 사용될때, 할당문에서 사용될때 차이.

해결됨

홍정모의 따라하며 배우는 C언어

안녕하세요, 초기화문에서 *가 사용될땐 주소가 저장되고, 일반 명령문에서 변수앞에 *를 붙이면 앞의 경우와 다르게 redirection 연산자로서 사용되는데 그냥 암기해야 되나요? 간단한 예를 들면, int *a = 0x0077 *a = 123; 위 두 문장의 의미는 각각 int 포인터 변수 a 를 선언하며 0x0077 이라는 주소값을 a 에 저장. a가 가리키는 주소(0x0077)에 접근하여 123을 저장. 감사합니다.

  • c
정진호 댓글 2 좋아요 1 조회수 273

mac OS 에서 프로젝트 진행 시 라이브러리 없음

미해결

C언어 슈팅게임 따라만들기

맥 혹은 리눅스에서 프로젝트를 진행하려고하는데 <conio.h><Window.h>등 윈도우에서만 가능한 라이브러리들을 어떻게 하면 좋을까요?다른 방식으로 구현할 수 있는 방법이 있을까요?

  • c
  • macos
qnd1215 댓글 1 좋아요 0 조회수 349

stdio.h 파일을 찾을수 없다고 나오네요.

해결됨

Go Hard to C (feat. Algorithm)

화면과 같이 진행중인 학습자입니다. cmd 에서 stdio.h 파일을 찾을수 없다고 나오는데, 혹시 추가 설치해야 하는 것이 있나요?

  • c
  • 알고리즘
아잉어려워2 댓글 1 좋아요 0 조회수 644

함수 선언부와 정의부가 다른 파일에 있어도 빌드가 되는 원리.

해결됨

홍정모의 따라하며 배우는 C언어

안녕하세요, 강의에서 main.c 파일 안에 #include "my_print_fucntions.h"를 통해 my_print_functions.h를 main파일에 인클루드해주면, 함수의 선언부만 main.c에 복붙이 됩니다. 선언부는 main.c안에 놓이는거겠죠. 그런데 이 때, #include "my_print_fucntions.c" , 함수의 바디가 정의되어있는 my_print_fucntions.c 파일을 main.c 안에서 인클루드해주지 않아도 되는 이유는, 링커가 알아서 함수를 찾아 연결해주기 때문이고, 그렇게 되는 이유는 헤더파일의 함수 선언부에서 extern 키워드가 생략되어있어서 그렇다고 봐도 될까요?( (extern) void print_hello(); 이렇게요.) 감사합니다.

  • c
정진호 댓글 1 좋아요 1 조회수 282

매크로 함수를 쓴 이유

해결됨

CUDA 프로그래밍 (2) - C/C++/GPU 병렬 컴퓨팅 - 벡터 vector 더하기

안녕하세요! 좋은 강의 잘 듣고 있습니다. common.cpp 코드 중에서 ELAPSED_TIME_BEGIN(N)과 ELAPSED_TIME_BEGIN(N)을 매크로 함수로 정의한 이유가 무었인지요? CUDA_CHECK_ERROR() 함수는 __FILE__과 __LINE__ 때문에 매크로 함수로 정의하신 걸로 이해합니다만, 시간 측정 함수들을 매크로함수로 정의하신 이유는 잘 이해되지 않습니다. 답변 부탁드립니다. 감사합니다.

  • c
  • c++
  • cuda
  • gpu
  • 병렬-처리
Dong Chan Park 댓글 1 좋아요 0 조회수 326

SDIO구현

미해결

HAL, CubeMX, TrueSTUDIO를 이용한 STM32F4 무료 강좌

SD카드 인터페이스와 FATFS 오픈소스를 이용해 출력하는 강의대로 GPIO 핀맵 설정하고 코드를 따라 작성했는데 SD카드에 저장된 데이터가 Character LCD로 출력되지 않습니다. 의심되는 문제는 두 가지입니다. Cube MX 때와 다르게 파일의 구성이 더 세분화 되어있습니다. 강의 때 작성한 소스코드에서는 Src 폴더안에 bsp_driver_sd.c 파일과 sd_diskio.c 파일이 같이 들어있는데 현재 업그레이드 된 STM Cube IDE에서는 해당 소스코드가 다른 폴더의 경로로 세분화 되어있습니다. 이것 때문에 인클루드 참조가 어려워져서 참조가 안되는 일부 함수로 인해 SDIO 통신이 안되는 것은 아닌지요?? 헤더파일의 참조 또한 다릅니다. stm32f4xx_hal_conf.h 파일은 Inc 폴더안에 있는데, 이것을 인클루드 하는 파일은 Drivers ->STM32F4xx_HAL_Driver->Inc->Legacy 경로에 stm32f4xx_hal.h 이 헤더파일이 stm32f4xx_hal_conf.h 파일을 인클루드 하고 있늗네 폴더 경로가 다르면 인클루드시 경로까지 고려하여 다시 작성해야 되는걸로 알고 있습니다. 저렇게 작성하면 참조가 되지 않아 동작이 중단되는 것으로 생각하는데 어떤점이 잘못된 것인지요?? MX_NVIC_Init(); 함수의 내부 코드 --> 3번의 경우 UART 통신 / 이전의 외부인터럽트 구현을 위한 것의 초기화로 알고 있는데 SDIO를 위한 NVIC 인터럽트 설정도 있는지요?? 코드를 열어보면 해당내용은 없는데, SDIO구현을 위한 global interrupt는 GPIO 핀맵에서 체크해두면 다른 소스코드에 작성되는 건가요? SDIO구현을 위한 함수를 일일이 다 들여봐야 할 것 같은데 시간상 효율이 떨어지는 길로 보여 질문드립니다. 추가로 해당링크에 제가 작성한 소스코드 파일을 첨부드립니다. https://cafe.naver.com/mhiveacademy/1351

  • c
  • iot
  • stm32f407vet6
현정호 댓글 1 좋아요 0 조회수 472

7분 28초경 질문

해결됨

홍정모의 따라하며 배우는 C언어

저번에 아무 생각 없이 지나쳤던 부분을 복습을 하면서 다시 보니 뭔가 이상해서 질문을 드립니다. 교수님이 arr2d를 인디렉션을 하면 arr2d[0]이 나온다고 하셨는데 저 생각으로는 &arr2d[0][[0]이 나오거든요 아마 제가 틀린걸거라고 생각은 하는데 교수님 말씀이 잘 이해가 안되네요 arr2d는 &arr2d[0]이고(arr2d[0]을 가리키고) arr2d[0]은 &arr2d[0][0]이니(arr2d[0][0]을 가리키니) arr2d를 인디렉션하면 &arr2d[0][0]이 나오는 게 제 생각에서는 맞는건데... 제가 지금까지 공부하면서 만든 복습노트를 봐도 제 생각에서는 &arr2d[0][0]이 맞는데 역시 제가 틀린거겠죠? 아니면 교수님 설명을 제가 다른 뜻으로 이해를 한 것 인가요?

  • c
용개형멋져 댓글 2 좋아요 2 조회수 340

저번에 VS code 실행이 안된다고 글 남긴 수강생입니다......

미해결

홍정모의 따라하며 배우는 C언어

교수님께서 말씀하신 깃허브 내용대로 c/c++ runner도 깔고 json 코드도 일부 수정했는데 여전히 실행이 안됩니다 뭐가 문제일까요.....아래에 launch.json 코드도 남기겠습니다. 그리고 말씀하신 xcode가 xcode-select 말씀하시는 거면 깔려있습니다. 제발 뭐가 문제인지 알고 싶네요 ㅜㅜ 초보라서 아직 개발 환경 설정 이런 데는 정말 다루기가 어렵습니다..... <launch.json> "version": "0.2.0", "configurations": [ { "type": "lldb", "request": "launch", "name": "Debug", "program": "${workspaceFolder}/<executable file>", "args": ["-std=c++17"], "cwd": "${workspaceFolder}" }, { "name": "C/C++ Runner: Debug Session", "type": "lldb", "request": "launch", "args": ["-std=c++17"], "cwd": "/Users/brian/Downloads/Visual Studio Code 2.app/Contents/Practice ", "program": "/Users/brian/Downloads/Visual Studio Code 2.app/Contents/Practice/build/Debug/outDebug " <c_cpp_properties> "configurations": [ { "name": "macos-clang-x64", "includePath": [ "${workspaceFolder}/**" ], "compilerPath": "/usr/bin/clang", "cStandard": "c17", "cppStandard": "c++17", "intelliSenseMode": "macos-clang-x64", "compilerArgs": [ "" ] } ], "version": 4 }

  • c
소심하지만멋진다람이 댓글 1 좋아요 1 조회수 644

printf(".20f",d) 출력 범위 질문

해결됨

홍정모의 따라하며 배우는 C언어

이렇게 커맨드를 쳤는데, 이렇게 나왔습니다. 그런데 제 출력값과 달리, 교수님은 3.141592....600 으로 끝이 반올림이 되었고, 그 이유로 double로 표현할 수 있는 자릿수의 한계때문에 그렇다고 말씀주셨습니다. 근데 저는 왜 반올림이 안되고 끝까지 나온걸까요? release, x86 에서 실행했습니다!

  • c
정진호 댓글 1 좋아요 1 조회수 230

CANable 구매 후 STM32F407V_EduBoard_Ver1.22와 연결 뒤 통신이 안됩니다.

미해결

HAL, CubeMX, TrueSTUDIO를 이용한 STM32F4 무료 강좌

CANable을 구매하고 cangaroo.exe 실행해보면 CANable을 인식하지 못합니다. CANable의 MCU는 STM32F072C8T6으로 확인되었고, CANable의 SWDIO, SWCLK 핀도 확인하여 펌웨어를 집어넣어보려고 하는데 ST LINK V2 펌웨어 디버거가 인식하지 못합니다. 까페 강의글에 댓글로 문의드렸습니다. https://cafe.naver.com/mhiveacademy?iframe_url_utf8=%2FArticleRead.nhn%253Fclubid%3D29220373%2526articleid%3D864%2526commentFocus%3Dtrue 답변부탁드립니다. 감사합니다 현정호 드림

  • c
  • iot
  • 드론-개발
현정호 댓글 1 좋아요 0 조회수 355

vscode 실행이 안됩니다......정말 힘드네요

미해결

홍정모의 따라하며 배우는 C언어

실행하려고 했더니 위와 같은 오류가 발생했습니다..... 제 나름대로 구글링도 해보고 깔려있는 json 파일에 들어가서 컴파일 경로도 수정해보고 configuration도 바꿨는데도 계속 오류가 나더군요....정말 너무 안 돼서 답답합니다 혹시 이 문제 어떻게 해결해야 할지 여쭤봐도 될까요? 도움 주신다면 정말 감사하겠습니다

  • c
소심하지만멋진다람이 댓글 1 좋아요 1 조회수 1072

1차 배열과 2차 배열에서 *ptr의 차이

미해결

홍정모의 따라하며 배우는 C언어

1차 배열에서 *ptr은 해당 첫번째 메모리의 값이엿는데 2차 배열에서 *ptr은 메모리값이 아니라 첫번째 메모리의 주손가요??

  • c
yuntyu01 댓글 1 좋아요 1 조회수 275

디버그 모드 실행

해결됨

독하게 시작하는 C 프로그래밍

안녕하세요 코드에 오류가 있을 시 디버그모드로 실행해서 분석을 하시는데 잘못된 코드에서 디버그모드를 실행시키면 마지막으로 성공한 빌드를 실행하시겠습니까? 라는 문구만 뜨고 디버그모드는 실행이 되지 않습니다. 강의 속 처럼 디버그모드에서 오류를 창르여면 어떻게 해야하나요?

  • c
  • 컴퓨터-구조
  • assembly-language
  • vc++
윤명 이 댓글 1 좋아요 0 조회수 208

배열로 예제를 풀면서 궁금했던 점.

해결됨

홍정모의 따라하며 배우는 C언어

#include <stdio.h> #include <stdbool.h> int library[100], number, bignumber, smallnumber, samenumber[100]; int i, sum, trial, same, last = 0; int main() { printf("Type your number : "); for(;scanf("%d", &number) != 0; i++) { library[i] = number; sum += number; } // i 는 반복한 횟수에서 한 번 더 더해지고 끝난다. printf("\n%d\n", sum); for(int a = 0;a != i + 1;a++) { for (int b = 0; b != i + 1;b++) { if(library[a] < library[b]) trial++; if (library[a] == library[b] && a != b) { same++; samenumber[a] = library[a]; } } if (trial == 0) bignumber = library[a]; if(trial == i - 1) smallnumber = library[a]; if(same > 0) { for (int c = 0;c != i + 1; c++) { if (samenumber[a] < library[c]) last++; } if (last == i - same - 1) smallnumber = samenumber[a]; } trial = 0; } printf("Biggest number : %d, Smallest number : %d, Mean : %f", bignumber, smallnumber, (float)sum / (float)i); return 0; } 이렇게 코드를 작성하여 예제 구현을 마쳤습니다. 배열을 사용해 수를 지정하고, 일일히 비교하는 제 방식을 쓰다가, 강의를 보니 맥이 빠지더군요....ㅋㅋ 제 질문은 library 주소에 미리 100개의 공간을 할당해두었는데, 만약 사용자가 100번 이상 수를 입력했을 때에도 프로그램이 원활하게 돌아가기 위한 대책입니다. 제가 입력한 횟수만큼만 library에 할당된 공간을 늘릴 수 있을까요?

  • c
상인김 댓글 1 좋아요 1 조회수 212

sizeof 연산자 질문

해결됨

독하게 시작하는 C 프로그래밍

안녕하세요 강사님 sizeof 연산자 강의에서 예제로 들어주신 코드 관련해서 질문이 있습니다. 예제를 실행시키면 실행은 잘되는데요 코드를 입력했더니 각 행마다 초록색 밑줄이 뜨고 해당 내용을 살펴봤더니 다음과 같이 뜨는데 무엇이 문제여서 뜨는 걸까요? 그런데 또 실행은 잘되는데 문제가 없는걸까요? 코드 8행의 printf("%d, %d\n", sizeof(123.456F), sizeof(123.45)); 결과가 4, 8로 나오는데 이것은 sizeof가 컴파일 타임 연산자로 해당 문자의 자료형의 크기만 반환하기에 sizeof(123.456F)의 123.456F가 Double형식으로 8byte, sizeof(123.45)의 123.45가 float형식이여서 4byte로 인식되어서 결과가 4,8로 나오는게 맞을까요? 감사합니다.

  • c
  • 컴퓨터-구조
  • assembly-language
  • vc++
semu0523 댓글 1 좋아요 0 조회수 252

scanf와 버퍼 질문

미해결

홍정모의 따라하며 배우는 C언어

scanf 함수는 입력 버퍼에서 개행 문자는 가져오지 않고 내버려두는 것이라고 들었습니다. 제가 궁금한 점은 만약 scanf 함수를 연달아 쓴다면 다음 입력 버퍼의 처음에 개행 문자가 있어서 오류를 일으키지 않느냐는 것입니다. 예를 들어 scanf("%d", &i1); scanf("%d", &i2) 라고 작성했을 때 첫번째 scanf에서 10을 입력하고 엔터를 쳤다고 가정하면 입력 버퍼에는 10과 \n이 들어가는데, scanf 함수는 \n은 읽어들이지 않아서 입력 버퍼에 그대로 남게 되는 것이 아닌가요? 제 생각엔 버퍼 지우기 while을 두 개의 scanf 함수 사이에 넣어야 버퍼를 비울 수 있다고 생각했는데 해보면 정상작동이 되는 이유가 궁금해요..

  • c
강진성 댓글 1 좋아요 1 조회수 367

단항 증/감 연산자

해결됨

독하게 시작하는 C 프로그래밍

안녕하세요 강사님 단항 증감 연산자 부분에서 강의에서 풀어주신 예제에 대해서 질문있습니다. data = ++x + ++y + x--;를 풀어쓰면 data = ++x + ++y + x ; x--; 가 된다고 하셨는데요 제가 캡처한 그림의 빨간 동그라미 부분(x)이 제가 아래에 풀어쓴대로 변형되어서 나온게 맞을까요? x--; 는 단항 증감연산자의 후위식 표기이고 연산의 우선순위는 한 개의 구문(세미콜론이 다 끝나고 나서 진행 됨) x--;는 x-=1; x=x-1; 와 같기에 data = ++x + ++y + x-1 ; 과 같이 쓸 수 있고 이때 x의 값에서 -1 이라는 연산의 우선 순위가 구문이 끝나고 적용되므로 x만 남고 후위식은 다음 행으로 옮겨진다 data = ++x + ++y + x ; x--; 빨간색 x 만 남는다는게 이상한데 맞을까요?

  • c
  • 컴퓨터-구조
  • assembly-language
  • vc++
semu0523 댓글 1 좋아요 0 조회수 185

이렇게 간단한 것도 구현 못하는 거면 심각한가요?

미해결

홍정모의 따라하며 배우는 C언어

이중 for문 자체는 이해를 하고 있는데 아예 떠올리질 못했습니다...이런 경우엔 뭘 해야 하나요? 복습한다고 해서 의미가 있을까요?

  • c
강진성 댓글 1 좋아요 1 조회수 357

3분 40초경 질문

해결됨

홍정모의 따라하며 배우는 C언어

3분 40초경의 교수님 설명을 듣고 void swap(char** xp, char** yp) { char* temp = *xp; xp = yp; *yp = temp; } void selectionSort(char* arr[], int n) { int i, j, min_idx; for (i = 0; i < n - 1; i++) // Note n - 1 { min_idx = i; for (j = i + 1; j < n; j++) // Note i + 1 { if (strcmp(arr[min_idx], arr[j]) == 1) //if (arr[min_idx] > arr[j]) min_idx = j; } swap(&arr[i], &arr[min_idx]); } } 를 void swap(char* xp, char* yp) { char* temp = xp; xp = yp; yp = temp; } void selectionSort(char* arr[], int n) { int i, j, min_idx; for (i = 0; i < n - 1; i++) // Note n - 1 { min_idx = i; for (j = i + 1; j < n; j++) // Note i + 1 { if (strcmp(arr[min_idx], arr[j]) == 1) //if (arr[min_idx] > arr[j]) min_idx = j; } swap(arr[i], arr[min_idx]); } } 예제를 이렇게 바꿔봤습니다. 포인터 변수의 주소를 넘겨주는 대신에 포인터 자체를 넘겨주고 swap 함수 안의 xp나 yp에 *를 때주면 첫 번째 예제와 두 번째 예제가 같아지는 것 아닌가요? 뭐가 잘못된건지 이해가 가질 않습니다. 추가로 swap 함수에 대해서 설명을 해봤는데 제 설명이 맞는건지 알려주시면 감사하겠습니다. swap의 매개변수를 char**로 적은 이유는 넘겨줄 게 포인터 변수의 주소라 char에 **를 붙여줬기 때문이다. 그리고 swap 함수 안에서 xp나 yp에 *를 붙인 이유는 매개변수로 넘겨준 건 arr[i], arr[min_idx]라는 포인터의 주소이고 스왑 해줘야 할 건 그 포인터의 메모리 공간에 있는 주소값이기 때문이다.

  • c
용개형멋져 댓글 1 좋아요 2 조회수 192

13분경 질문

해결됨

홍정모의 따라하며 배우는 C언어

https://www.inflearn.com/questions/445486 이 질문의 답변에서 strncpy는 복사 하려는 공간이 복사 대상보다 클 경우 null value로 채워주는 것으로 알고 있습니다. 라고 말씀을 해주시는데 그러면 char dest[100] = ""; // make sure memory is enough char source[] = "Start programming!"; strcpy(dest, source); strncpy(dest, source, 5); 이걸 실행 했을 때 Start만 출력이 되어야 하는 거 아닌가요? 근데 교수님은 Start가 복사 될 때 복사 될 문자열에 NULL 캐릭터가 없어서 위의 예제를 실행하면 Start programming!가 전부 출력 된다고 말씀하셨고 실제로 그렇게 됐잖아요 교수님 말씀이 맞는건지 아니면 제가 답변자님 답변을 잘못 이해한 것인지 잘 모르겠네요 source가 들어갈 dest에 이미 데이터가 들어가 있어서 나머지 공간을 NULL 캐릭터로 채워주지 않은거라고 해석해도 될까요? 그리고 Start programming!이 전부 출력되는 이유를 제가 강의를 듣고 나름대로 설명해 봤는데 이게 맞는지 모르곘네요. 위의 예제를 실행시키면 "Start”만 출력을 할 것 같지만 "Start programming!" 전부를 출력하는데 그 이유는 strncpy() 함수에서 원본을 복사해서 넣을 때 복사본의 맨 마지막에 NULL 캐릭터를 추가해주지 않고 문자열을 복사해서 넣어줄 공간만 신경 쓰지 그 외의 공간은 신경 쓰지 않기 때문이다. (dest에서 Start가 들어갈 공간만 신경 쓰지 나머지 공간은 신경 쓰지 않는다는 뜻) 라고 설명을 해봤어요

  • c
용개형멋져 댓글 1 좋아요 2 조회수 200

인기 태그

인프런 TOP Writers

주간 인기글