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. No Image

    괜찮은 해쉬 계산하는 프로그램이 있을까요?

    1. 하드디스크를 백업 목적으로 새 하드디스크에 파티션 전체를 복사했습니다. (FastCopy를 썼는데 근본적으로 Ctrl+C, V와 동일합니다).     2. 다 복사를 하고 누락 파일이 없는지까지 확인했는데 원본이 3.2TB 중 1.7GB 더 큽니다.    ...
    Date2020.02.12 질문 Bylocallall Reply12 Views1011
    Read More
  2. 네트워크 구성 다시 질문드려 봅니다....

      안녕하세요. 요즘 질문글만 올리게 되어 죄송합니다 ㅠㅠㅠ   다름이 아니라 현재 네트워크 구성에 문제가 있어 고수분들의 의견을 구하고저 글을 씁니다. 앞서 이런 구성은 예전에도 질문을 올렸습니다만, 그때랑 다른 부분이 좀 있어...
    Date2020.02.12 질문 By하스웰 Reply12 Views659 file
    Read More
  3. 크롬, 불편한 동영상 광고를 차단

    구글은 Coalition for Better Ads (CBA)에 참가, 이곳의 광고 기준인 Better Ads Standard에 맞지 않는 광고를 크롬에서 차단해 나갈 예정입니다. 2020년 8월 5일부터 크롬에선 아래에 해당되는 광고가 차단되며, 유튜브도 예외 대상은 아...
    Date2020.02.12 소식 By낄낄 Reply9 Views1061 file
    Read More
  4. macOS 부팅 시퀸스 - 2018년 기준

    혹시 궁금해 하실분이 계실거 같아 글을 올려봅니다.     윈도 부팅체계는 어찌 돌아가는지 모르겠지만, 아마 맥하고 비슷하겠죠. 이제 이 그림도 바뀔때가 되었군요.
    Date2020.02.11 일반 Bytitle: 폭8책읽는달팽 Reply1 Views856 file
    Read More
  5. [macOS] 램을 과하게 점유하는 의문의 프로세스 (WindowServer)

      작업중에 답답함이 느껴져서 활성상태를 확인해 보니 WindowServer라는 프로세스가 메모리를 상당히 점유하고 있더군요  16GB중에 1GB가 사라지니 심리적으로도 불안해지네요 어쩔때는 1GB 위로도 치솟습니다.    인터넷을 찾아보니 디...
    Date2020.02.11 질문 By참치마요 Reply16 Views31783 file
    Read More
  6. 크롬, https 사이트에서 http의 다운로드를 차단

    구글 크롬에서 믹스드 컨텐츠 다운로드를 단계적으로 차단합니다. https 보안이 적용된 페이지에서 http 컨텐츠를 다운받지 못하도록 제한하는 것입니다. 웹 페이지가 https로 암호화돼도 컨텐츠가 http라면 완전히 안전하다 보기 어렵습...
    Date2020.02.11 소식 By낄낄 Reply19 Views3151 file
    Read More
  7. 윈도우 10, 파이어폭스 대신 MS 엣지를 권장

    윈도우 10의 시작 메뉴에서 아직도 파이어폭스를 쓰냐? 마이크로소프트 엣지가 여기 있다라는 항목이 등장했습니다. 파이어폭스를 기본 브라우저로 사용 중인 시스템에 이런 항목이 뜬다고 하네요. 광고 푸시 기능을 끄면 나오지 않습니다...
    Date2020.02.10 소식 By낄낄 Reply14 Views6081 file
    Read More
  8. No Image

    안정적인 백신이 있을까요?

    안녕하세요 오랜만에 글을 써보네요   다름이 아니라 윈도우10 1909 를 사용중인데 어베스트 프리 19.8 버전하고 무언가 안맞는지 간혹 충돌을 일으켜서 블루스크린이 발생하더라구요 블루스크린 뷰어에도 어베스트 구성요소가 원인이라고...
    Date2020.02.10 질문 By니코다이스키 Reply20 Views1102
    Read More
  9. No Image

    요즘 익스(인터넷) 쓰면 지원 종료 된다고 자꾸 알림이 뜹니다.

    엣지나 크롬, 파폭 등으로 갈아타라고는 하는데 아직 정부기관, 금융권, 심지어 네이버TV 등등 플래시 기반인 것도 있고 그 놈의 액티브X나 보안프로그램 때문에 골치가 아프네요.
    Date2020.02.10 질문 By소망노인복지센터 Reply4 Views553
    Read More
  10. 윈도우7의 버그로 인해서 사용자가 컴퓨터를 종료하거나 재부팅 할수 없음

    (번역과 의역이 조금 섞여 있습니다!)   온라인 상의 여러 보고서에 따르면 최근에 출처를 알 수 없는 이상한 버그가 윈도우7 OS가 설치되어있는 PC를 강타했다고 합니다.  Windows 7 사용자들은 시스템을 종료하거나 재부팅할 때마다 "Y...
    Date2020.02.10 소식 By이선예 Reply4 Views989 file
    Read More
  11. No Image

    Apple, macOS의 보안을 위해서 Kexts을 없애려고 함

    Apple이 보안을 위해서 Kexts(kernel extensions)을 없애고 system extensions 이라는 새로운 매커니즘으로 전환할 계획이라고 합니다. 기사에 따르면 macOS 10.15.4 이후 부터 Kexts가 포함된 소프트웨어의 사용은 더이상 사용되지 않는 ...
    Date2020.02.10 소식 By이선예 Reply9 Views1011
    Read More
  12. No Image

    넷플릭스, 안드로이드에서 AV1 코덱 사용

    넷플릭스가 안드로이드 모바일 앱에서 AV1 코덱으로 스트리밍을 제공합니다. AV!은 고성능에 로열티가 없는 비디오 코덱으로 VP9보다 압축 효율이 20% 향상됐따고 합니다. 앞으로 모든 플랫폼으로 AV!를 확장할 계획이나, 일단은 데이터 ...
    Date2020.02.09 소식 By낄낄 Reply6 Views1353
    Read More
  13. No Image

    신종 코로나 때문에 중국의 채굴 시설 일부가 폐쇄

    신종 코로나 바이러스의 확산을 이유로 중국 정부가 BTC.Top이 운영하는 신장 위구르주 비트코인 채굴장을 폐쇄했습니다. 여기 말고 다른데도 차단했다는 말은 아직 없네요. 저 동네 정부가 과격하게 반응하는 것일수도 있고요.
    Date2020.02.08 소식 By낄낄 Reply0 Views568
    Read More
  14. No Image

    윈도우 on ARM에서 하이퍼-V 지원

    윈도우 10 인사이더 프리뷰 빌드 19559에서 서피스 프로 X 같은 ARM64 디바이스에 하이퍼-V 지원을 추가했습니다. 하이퍼-V는 윈도우의 기본 가상화 기술입니다. x86이 아닌 ARM으로 확장했다는데 의의를 두면 되겠습니다.
    Date2020.02.08 소식 By낄낄 Reply2 Views993
    Read More
  15. No Image

    팀뷰어 암호 유출 취약점

    팀뷰어 원격 접속에 사용하는 비밀번호를 AES로 암호화해 저장하고, 모든 시스템의 AES 키를 똑같은 걸 쓴다고 합니다. 따라서 암호화된 비밀번호를 레지스트리에서 찾아 암호를 풀어내기가 그렇게 어렵진 않다네요.
    Date2020.02.08 소식 By낄낄 Reply3 Views1192
    Read More
목록
Board Pagination Prev 1 ... 370 371 372 373 374 375 376 377 378 379 ... 578 Next
/ 578

최근 코멘트 30개
낄낄
14:00
Pineapple
13:59
아이들링
13:49
아이들링
13:48
낄낄
13:39
린네
13:38
낄낄
13:38
까르르
13:36
금산조
13:23
영원의여행자
13:20
까마귀
13:20
까마귀
13:20
린네
13:17
아이들링
13:15
별밤전원주택
13:10
별밤전원주택
13:10
린네
13:04
린네
13:03
아라
13:03
침착맨
13:02
린네
13:02
소주
12:36
아이들링
12:27
카토메구미
12:20
고자되기
12:19
책읽는달팽
12:16
탐린
12:16
툴라
12:07
ASTRAY
12:01
rnlcksk
11:59

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

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


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

sketchbook5, 스케치북5

sketchbook5, 스케치북5

나눔글꼴 설치 안내


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

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

설치 취소