Skip to content

기글하드웨어기글하드웨어

인터넷 / 소프트웨어 : 윈도우즈, 리눅스, 기타 운영체제, 각종 어플리케이션, 프로그램, 소프트웨어, 인터넷, 인터넷 서비스에 대한 이야기, 소식, 테스트, 정보를 올리는 게시판입니다.

일반
2016.08.16 11:12

뜬금없이 만져보는 C언어.

profile
조회 수 960 댓글 30
Extra Form

모 님이 주기적으로 자게에 올리는 프로그래밍 근황 글을 보고 C언어에 관심이 쵸큼 생겨, 더듬거려가며 간단히 C언어를 조금 만져보고 있습니다. 하라는 VBA는 안 하고!!
 

근데 제가 컴맹이다 보니까, 처음부터 막히는 데가 생기는군요.
 

#include <stdio.h>

unsigned int exponential (int a, int b)
{
    int i;
    int result = a;
    
    for (i = 1; i < b; i++)
    {
        result *= a;
    };
    
    return result;
};

int main (int argc, char **argv)
{
    //int a = (int)argv[1];
    //int b = (int)argv[2];
    
    int a = 2;
    int b = 3;
    int c = exponential(a, b);
    printf("%d\n", c);
    
    return 0;
};

간단하게 명령행에서 인자로 숫자 2개를 받아 a^b를 계산하여 출력하는 프로그램을 짜려고 했는데, 인자를 받아들이는 곳에서 막혀 버렸습니다. 이거 해결하려면 그 포인터인가 뭐시긴가부터 먼저 좀 알아야 할 것 같은데, 맞나 모르겠네요. 중괄호나 문장 끝에 붙이는 ; 이것도 익숙하지 않고, 프로그램의 진입점인 main() 함수가 맨 아래인 것도 그렇고, 좀 헷갈리네요. 좋은 독학용 책이라도 추천받아야 할까봐요.
 

하여튼, 이런 거 만져보다 보니 파이썬이 얼마나 편한 언어였는지 새삼 깨닫게 되네요. 근데 난 지금 VBA를 만져야 하는데, 대체 뭐하는 건지…
 

추가 :
여러분들의 도움을 받아 다음과 같이 의도한 대로 동작하는 코드를 작성할 수 있었습니다. 감사합니다.
 

#include <stdio.h>
#include <stdlib.h>

unsigned int exponential (int a, int b);

int main (int argc, char **argv)
{
    if (argc != 2+1)
    {
        printf("Please enter 2 arguments together.\n");
        exit(1);
    };
    
    int a = atoi(argv[1]);
    int b = atoi(argv[2]);
    
    int c = exponential(a, b);
    printf("%d\n", c);
    
    return 0;
};

unsigned int exponential (int a, int b)
{
    int i;
    int result = a;
    
    for (i = 1; i < b; i++)
    {
        result *= a;
    };
    
    return result;
};


  • profile
    라임베어      성공한 사람은 포장되어 일반인을 망친다. 2016.08.16 11:29
    unsigned int expotential(int a, int b)
    {
    if( b == 0) return 1;
    return a*expotential(a, b-1)
    }

    제곱은 재귀함수 처리 하면 편합니다..
  • profile
    쮸쀼쮸쀼 2016.08.16 11:30
    이건 그냥 제어문 구조에 익숙해지려고 써본 거라서요. 이런 경우는 재귀가 확실히 편하고 깔끔하기는 하죠.
  • ?
    Φloteer      🤔 2016.08.16 14:18
    근데 재귀는 편할 수는 있어도 (혹은 목적에 따라서는 보기 깔끔할 수는 있어도) 이론적으로 좋은 기술은 아니지요. 컴파일러가 최적화해줄 수 있는 부분은 최적화해주기는 하지만...
  • profile
    쮸쀼쮸쀼 2016.08.16 14:22
    일찍이 귀도 반 로썸 선생님께서도 “Is it really such a big deal to rewrite your function to use a loop?”라고 말씀하셨다고 하죠.
    http://gigglehd.com/zbxe/14093956#comment_14094213
  • ?
    Minny      Main System : Microsoft Surface Go (Model 1824) Intel® Pentium® Proces... 2016.08.16 11:41
    위에 함수 쓸거 선언 해 두고 난 다음에 밑에 함수를 만들게 되면, 매인을 위에 올릴 수 있죠...

    그리고 딱히 코드에 문제는 없는데.... 요. 매개변수 받는거랑 리턴하는것도 그냥 잘 되어 있고...
  • profile
    쮸쀼쮸쀼 2016.08.16 11:44
    main 함수 안의 주석처리해둔 부분이 문제가 되는 부분입니다. 저는 이게 인자들의 내용을 배열에다가 넣어둔 것이라 생각하고 배열의 요소 2개를 가져와 변수에다가 넣으려 한 것인데, 저 부분을 그대로 쓰면 뭔가 경고와 함께 이상한 결과값이 나오더군요. 그래서 일단 문제가 되는 부분을 주석처리한 뒤, 하드코딩으로 계산할 값을 넣어둔 게 위 코드입니다.

    그나저나 C언어에서는 함수도 변수처럼 미리 선언을 해야 하나 보군요. 메모메모.
  • profile
    설아      ShellCat ː 雪雅 - 1st shell 2016.08.16 12:14
    저거 대로 받아오면 argv에 들어가 있는 값이 문자 1에 해당하는 아스키 값이..들어가 있을텐데...
    아닌가?...
  • profile
    쮸쀼쮸쀼 2016.08.16 12:53
    저도 그리 예상했는데, 어째 잘 안 되네요.
  • profile
    순딩sheep      회사에서 살아남기 2016.08.16 18:32
    처음에 하셨던 것 처럼 함수를 아예 만들어두셔도 됩니다만,
    그냥 함수 선언만 해두고 나중에 해당 함수를 만들어두면 깔끔하고 보기도 좋으니까요.
    미리 다른 함수들이 있으면 main문 찾으려고 스크롤 엄청 해야하니, main문 바로 나오게 하는거죠.
  • profile
    쮸쀼쮸쀼 2016.08.16 18:42
    그냥 헤더 파일로 빼버리는 것이 깔끔하겠네요.
  • ?
    Minny      Main System : Microsoft Surface Go (Model 1824) Intel® Pentium® Proces... 2016.08.16 20:21
    아하,,, 주석 해 둔 부분 자체를 그냥 생략하고 넘어가버렸네요...

    머리속에 컴파일러... ;;;
  • profile
    쮸쀼쮸쀼 2016.08.16 22:28
    히익 이분 최소 인공지능;
  • ?
    Φloteer      🤔 2016.08.16 12:03
    히익 어려운 언어 하신다..
  • profile
    쮸쀼쮸쀼 2016.08.16 12:03
    뉴비는 늅늅하고 웁니다. C언어 가르쳐주세요!!
  • ?
    Φloteer      🤔 2016.08.16 12:51
    #include <stdio.h>
    #include <stdlib.h>

    unsigned int expotential(int a, int b);

    int main(int argc, char **argv)
    {
    int a = atoi(argv[1]);
    int b = atoi(argv[2]);

    //int a = 2;
    //int b = 3;
    int c = expotential(a, b);
    printf("%d\n", c);

    return 0;
    }

    unsigned int expotential(int a, int b)
    {
    int i;
    int result = a;

    for (i = 1; i < b; i++)
    {
    result *= a;
    }

    return result;
    }

    대충 이런 느낌을 원하셨던 거려나요? atoi말고 더 안전한 함수도 있는데 (콘솔 입력인 경우 그런 걸 쓰는 게 맞을텐데) 일단 기본적으로는..
  • profile
    쮸쀼쮸쀼 2016.08.16 12:55
    atoi라, 처음 보네요. 다른 함수는 어떤 것이 있나요?
  • ?
    Φloteer      🤔 2016.08.16 12:58
    ascii를 integer로 바꾼다고 해서 atoi입니다. string->int라면 여기 좀 더 자세한 답이 있습니다.
    http://stackoverflow.com/questions/27260304/equivalent-of-atoi-for-unsigned-integers
  • profile
    쮸쀼쮸쀼 2016.08.16 13:17
    컴파일해보니까 런타임에 Segmentation fault 오류가 뜨는군요…라고 썼다가 다시 보니 인자를 안 넣었네요. 인자를 넣으니까 작동되긴 합니다. 감사합니다.
  • ?
    analogic 2016.08.16 12:25
    고전중의 고전인 터보C 정복 책을 읽어보시면 설명이 자세히 나옵니다.
  • profile
    쮸쀼쮸쀼 2016.08.16 12:48
    어디서 구할 수 있나요?
  • ?
    amor&spero 2016.08.16 13:05
    (몇주만에 써보는 댓글이 C라니...흑흑)
    main함수가 받아들이는 argv가 char**, 즉 char의 포인터의 포인터(...)라서
    다르게 보면 C에서 보통 string을 char*로 갖고 있기도 하니 결국 string의 배열로 볼 수 있습니다.
    그래서 아마 제생각에는 argv[1]을 가지고 strtol같은 함수를 써보심이 어떤지..
  • profile
    쮸쀼쮸쀼 2016.08.16 13:23
    아직 포인터가 뭔지 잘 몰라서…
  • ?
    amor&spero 2016.08.16 13:36
    핰 ㅠㅠ C에서 포인터는 약간 마의 장벽같은 느낌이죠... 그거 이해하고 쓰는데 몇개월은 걸린것같은..
  • ?
    Φloteer      🤔 2016.08.16 14:48
    참고로 말하자면 효율적으로 짜인 정수 제곱 함수는 이런 느낌입니다.
    http://stackoverflow.com/a/101613
    물론 이렇게 안해도 32비트급 변수에 들어가는 수준의 결과를 한두번 계산하는 수준이라면 엔간히 느린 구현도 괜찮습니다만.. 속도가 필요한 경우에는요.
  • profile
    쮸쀼쮸쀼 2016.08.16 15:00
    이거 비트연산 맞죠? 근데 봐도 모르겠네요;
  • ?
    Φloteer      🤔 2016.08.16 15:04
    저 알고리즘 밑에 나와있는 설명( http://stackoverflow.com/a/108959 , https://en.wikipedia.org/wiki/Exponentiation#Efficient_computation_with_integer_exponents )과 같은 원리입니다. 그저 그걸 좀 더 최적화하기 위해 비트연산도 쓴 듯 합니다.
    외에도 다른 댓글에는 아예 룩업테이블을 도입한 구현도 있고 그러네요. 당연하지만 엄청 자주 연산해야 하거나 하는 경우가 아니면 32~64비트는 꼭 이렇게 안해도 크게 체감차이가 나지는 않습니다. 걍 필요하면 이렇게 하기도 한다 정도..
  • profile
    쮸쀼쮸쀼 2016.08.16 15:10
    흐에에에… 역시 머리 좋은 사람들은 다르네요. 봐도 뭐가 뭔지 하나도 모르겠어요.
  • ?
    Φloteer      🤔 2016.08.16 15:11
    그래서 저는 직접 뭘 최적화하는 건 엔간해선 포기하고 다른사람 걸 가능한한 끌어다 쓰는걸로 방침을 (..)
  • ?
    퀘윈 2016.08.19 06:59
    3을 7번 곱한다 -> 3을 111(2진수)번 곱한다
    3^7 = (3^1) * (3^2) * (3^4) 이런 식으로 작동되는 거에요.
  • profile
    쮸쀼쮸쀼 2016.08.19 10:12
    아하… 역시 주석이란 중요하군요!

작성된지 4주일이 지난 글에는 새 코멘트를 달 수 없습니다.


  1. 파이어폭스 새 엔진인 servo가 이제 리눅스 재단에서 관리합니다.

    최근에 모질라가 코로나로 인해 서보나 보안 분야 직원들을 주로 해고해서 서보 깃 허브에 커밋 갯수가 줄어드는 등 미래가 불투명해 보였었습니다. 그러나 모질라가 최근에 서보 프로젝트를 리눅스 재단에 이양하기로 하면서 다시 한번 ...
    Date2020.11.20 소식 By엠폴 Reply7 Views1349 file
    Read More
  2. 파이어폭스 83 정식 발표. 로딩 속도 15% 개선, HTTPS 전용 모드

    파이어폭스 83 버전이 나왔습니다. 자바스크립트 엔진인 스파이더몽키를 뜯어 고쳐 로딩 속도 15%, 반응 속도 12% 개선과 함께 메모리 점유율은 8% 줄었습니다. 여기에선 HTTPS 전용 모드라는 기능이 추가됐는데요. http라고 써도 https로...
    Date2020.11.20 소식 By낄낄 Reply4 Views1039 file
    Read More
  3. 후후가 본분을 잃어가고 있는 느낌이네요

    언젠가부터인가, 문자 메세지나 카톡에 링크만 포함됐다 하면 후후가 '스미싱 URL 발견'이란 창을 띄워버립니다. 정말 의심될만한 건덕지가 있으면 이해를 하겠는데, 링크만 있으면 무조건 스미싱 URL이에요. 왕년에 '너 빨...
    Date2020.11.19 일반 By낄낄 Reply15 Views6051 file
    Read More
  4. 인터넷 익스플로러 지원 중단을 앞두고 눈물이 나옵니다

    아버지께서 사시는 건물의 엘리베이터 관리 어쩌고 해서 안내장이 왔길래 승강기민원24에 접속해서 본인인증을 하고 접속하려고 했으나. 저 사이트는 본인인증 창에서 리턴값을 어떻게 정해놨길래 저런 주소가 뜨는 걸까요. 인터넷 익스플...
    Date2020.11.19 일반 By낄낄 Reply7 Views1012 file
    Read More
  5. 애플 M1 프로세서의 컴파일 속도 테스트

    애플 M1 프로세서의 컴파일 속도 테스트입니다. M1 맥은 인텔 프로세서를 탑재한 비싼 맥북 프로보다도 빠르고, 맥 프로와도 비슷한 수준입니다. 그리고 컴파일 작업 후 남아있는 배터리도 많습니다. 고성능, 고효율이군요.
    Date2020.11.19 소식 By낄낄 Reply5 Views1881 file
    Read More
  6. 애플 배터리 상태 관리 기능, 애플 실리콘에서는 못 끔

    애플의 배터리 상태 관리 기능을 애플 실리콘 탑재 맥에서는 끄지 못합니다. https://support.apple.com/en-us/HT211832 이 기능은 macOS 카탈리나 10.15.5에 도입된 시스템으로 배터리의 온도 기록과 충전 패턴을 모니터링해 배터리의 최...
    Date2020.11.19 소식 By낄낄 Reply2 Views811 file
    Read More
  7. 애플 Mac에서 텐서플로 가속 가능해.... 'M1 도 된다'

    텐서플로 2.4에서는 맥에서도 GPU가속이 가능하게 될 전망입니다. 이는 애플의 ML compute 프레임 웍을 지원하면서 가능케 된 것인데요, 따라서 인텔맥과 ARM맥에서도 사용 가능합니다.   지금은 애플의 텐서플로 레포( https://github.co...
    Date2020.11.19 소식 By뚜찌`zXie Reply18 Views3903 file
    Read More
  8. No Image

    비트코인 시세 18000달러에 도달

    비트코인 시세가 지난 하루 동안 9% 올라 18,453.87달러까지 올랐다가 지금은 다시 떨어졌습니다. 왜 오르는지 이유는 모르겠고 갖다 붙이기 마련이겠으나, 코로나 때문에 돈이 여기에 올리나 봅니다. 또 페이팔에서 비트코인을 지원한다...
    Date2020.11.19 소식 By낄낄 Reply4 Views720
    Read More
  9. No Image

    크롬 87 발표. 상당히 큰 성능 향상과 탭 검색 지원

    구글이 크롬 87 버전을 발표했습니다. 현재 가장 앞에 위치한 액티브 탭에 성능을 집중하고 백그라운드 탭의 CPU 사용량을 줄이도록 자바 스크립트 타이머를 제한해 전체 CPU 점유율은 최대 5배 줄어들고 배터리 사용 시간은 1.25시간 늘...
    Date2020.11.19 소식 By낄낄 Reply5 Views1096
    Read More
  10. No Image

    애플 실리콘 지원 크롬의 버그

    구글은 애플 실리콘 M1을 지원하는 크롬을 공개했으나, 소프트웨어 크래시 문제를 발견해 현재 조치중입니다. M1용 크롬이 아니라 인텔 CPU용 크롬을 다시 설치하면 해결할 수 있다네요.
    Date2020.11.19 소식 By낄낄 Reply2 Views461
    Read More
  11. No Image

    M1 맥에서 개발자 지원 없이도 iOS 앱 실행 가능

    알려진 대로 macOS 빅 서와 함께 앱 개발자는 아이폰과 아이패드용 앱을 그대로 맥용으로 출시할 수도 있게 되었습니다. 다만 개발자가 맥 지원을 제외한 경우는 앱 스토어에서 설치가 불가능한데, 대신 ipa 파일을 추출해서 사용하면 개...
    Date2020.11.19 소식 By이견 Reply2 Views1080
    Read More
  12. 애플리케이션 업데이트가 많이 쌓였네요

    주제가 '소프트웨어'라 이쪽에 올립니다.   오랜만에, 거진 2주만에 App Store에 들어갔습니다. 업데이트 새로 고침을 하니 예순 개에 육박하는 업데이트가 저를 기다리고 있었어요.   아무래도 카카오톡이 가장 많이 신경쓰일 수밖에요. ...
    Date2020.11.18 일반 Bytitle: 컴맹임시닉네임 Reply10 Views572 file
    Read More
  13. Homebrew, 앞으로 몇달은 네이티브 애플실리콘 지원 안해

          로제타로 돌아는 가는데 설치가 안되는 패키지들도 좀 있습니다. 출처 링크에서 확인 가능합니다.    ARM 타겟으로 빌드해서 설치하는 기능이 향후 몇달간 지원되지 않습니다. 애플 실리콘을 지원하는 GCC stable 빌드가 2021년 중...
    Date2020.11.18 소식 ByNPU Reply1 Views887 file
    Read More
  14. No Image

    Electron 11.0 출시, 애플 실리콘 정식 지원

    Electron이 11.0 버전을 출시했습니다. 이번 버전부터 애플 실리콘(arm64)에 대한 정식 지원이 추가되었습니다. https://www.electronjs.org/blog/apple-silicon   Electron은 자바스크립트를 사용하여 데스크톱 앱을 만들 수 있는 프레임...
    Date2020.11.18 소식 By쮸쀼쮸쀼 Reply3 Views991
    Read More
  15. No Image

    구글의 코로나 19 감염 에측 AI가 일본을 분석

    지금까지 미국 지역을 대상으로 제공됐던 구글의 코로나 19 예측 AI를 일본 지역에서도 쓸 수 있게 됐습니다. 새로운 데이터 세트를 추가하고 모델을 강화해 예측 정확도를 향상시켰는데요. 결론부터 말하자면 일본에선 감염 규모가 대폭 ...
    Date2020.11.18 소식 By낄낄 Reply1 Views934
    Read More
목록
Board Pagination Prev 1 ... 305 306 307 308 309 310 311 312 313 314 ... 577 Next
/ 577

최근 코멘트 30개

MSI 코리아
더함
AMD
한미마이크로닉스

공지사항        사이트 약관        개인정보취급방침       신고와 건의


기글하드웨어는 2006년 6월 28일에 개설된 컴퓨터, 하드웨어, 모바일, 스마트폰, 게임, 소프트웨어, 디지털 카메라 관련 뉴스와 정보, 사용기를 공유하는 커뮤니티 사이트입니다.
개인 정보 보호, 개인 및 단체의 권리 침해, 사이트 운영, 관리, 제휴와 광고 관련 문의는 이메일로 보내주세요. 관리자 이메일

sketchbook5, 스케치북5

sketchbook5, 스케치북5

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소