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

    리눅스 5.18, 인텔 스레드 디텍터 지원

    리눅스 커널 5.18 버전에서 인텔 앨더레이크의 P 코어와 E 코어 사이에 작업을 효율적으로 분배하는 스레드 디텍터 기능이 추가됩니다. 여기에선 인텔 하드웨어 피드백 인터페이스라고 부르네요. 리눅스 5.18이 언제 나올지는 모르지만, ...
    Date2022.02.10 소식 By낄낄 Reply0 Views433
    Read More
  2. NZXT CAM 프로그램 질문입니다.

        첫번째 사진 처럼 냉각 탭에서 GPU 온도가 표시 되고있지 않습니다.   두번째 사진을보면 그래픽카드를 제대로 잡고 있긴 하거든요?     이게 확인해보니까 내장그래픽 + 외장그래픽 두개를 사용하면   내장그래픽의 온도를 잡아버려...
    Date2022.02.09 질문 By포도맛계란 Reply3 Views1296 file
    Read More
  3. 메타, 시총 6천억 달러 붕괴…'플랫폼 규제' 피하나

      페이스북을 운영하고 있는 메타의 시가총액 6천억 달러가 붕괴됐다. 8일(현지시간) 나스닥 시장에서 메타 주가는 전날보다 2.1% 하락한 224.91달러로 마감됐다. 이날 주가가 하락하면서 메타의 시가총액은 5천993억 달러로 떨어지면서 ...
    Date2022.02.09 소식 By1N9 Reply7 Views948 file
    Read More
  4. 어도비 프리미어의 새로운 기능 추가

    어도비 프리미어의 최신 버전에서 추가된 기능들입니다. 자동으로 음성을 자막으로 바꿔주는 기능이 더욱 빨라졌습니다. 지금까지는 클라우드에서 처리했으나 이제는 오프라인에서 처리합니다. 코어 i9나 애플 M1 같은 고성능 프로세서를 ...
    Date2022.02.09 소식 By낄낄 Reply3 Views825 file
    Read More
  5. No Image

    메타, 유럽의 데이터 처리 규정을 위반

    아일랜드 데이터 보호 위원회는 메타가 유럽 지역에서 페이스북과 인스타그램을 서비스하면서, 개인 정보를 미국에 보내는 양이 너무 많아 데이터 보호 규정을 위반했다고 결론 지었습니다. EU의 법률에 따르면 EU 내부에서 사용자 데이터...
    Date2022.02.08 소식 By낄낄 Reply0 Views455
    Read More
  6. No Image

    테슬라, 2021년 가상화폐 투자로 1억 100만 달러 손실

    테슬라가 SEC에 제출한 내용에 따르면, 2021년 가상화폐(비트코인 구입) 투자로 1억 100만 달러의 손실을 봤다고 합니다. 테슬라는 보유하고 있던 비트코인의 일부를 매각해 지금은 19억 9천만 달러의 비트코인을 갖고 있습니다.
    Date2022.02.08 소식 By낄낄 Reply4 Views617
    Read More
  7. No Image

    시바견 코인의 소각 발표 후 가격이 급등

    가상화폐 관련 회사인 비거 엔터테인먼트가 발렌타인데이에 10억 개의 시바견 코인을 소각해 유통량을 줄이겠다고 밝혔습니다. 그래서인가 가격이 올랐네요. 하루동안 26.8%가 뛰었다고 합니다. https://twitter.com/WhaleStats/status/14...
    Date2022.02.08 소식 By낄낄 Reply2 Views867
    Read More
  8. No Image

    오피스, 다운받은 파일에서 VBA 매크로를 기본 비활성화

    마이크로소프트는 인터넷에서 다운받은 파일에 VBA 매크로가 포함됐을 경우, 오피스에서 이 파일을 열 때 기본적으로 VBA 매크로를 실행하지 않도록 막습니다. VBA 매크로는 강력하면서도 편리한 자동화 스크립트를 제공하지만, 이걸 악용...
    Date2022.02.08 소식 By낄낄 Reply1 Views581
    Read More
  9. 구글 크롬 아이콘 변경

    구글 크롬의 아이콘이 8년만에 바뀌었습니다. 점점 더 평평해지고, 그림자 같은 효과도 사라지면서 단순한 디자인이 되어가고 있네요.
    Date2022.02.07 소식 By낄낄 Reply5 Views1076 file
    Read More
  10. No Image

    [질문]셀룰러망에서의 WireGuard 접속시의 속도가 비정상적으로 느려졌습니다. - 추가

    외부에서의 홈네트워크 접근을 위하여 WireGuard로 VPN을 구성하여 요 근래까지는 유용하게 잘 써왔었습니다.   헌데 근래들어서 셀룰러망에서 접속하면 정상적인 사용이 불가능할 정도로 속도가 하락하는 문제가 발생하고 있습니다.   접...
    Date2022.02.07 질문 ByRuBisCO Reply0 Views580
    Read More
  11. No Image

    집 단자함 보고 놀랐습니다.

    우선 제 집이라고 쓰긴하지만 부모님 명의의 집은 약 16년 정도 된 3X평형 아파트 입니다. 요즘 타워형 서타일이 아닌 일명 3베이 구형 아파트죠.   이 집으로 이사 올 때 전 따로 살고 있었고, 유선으로 인터넷 쓸 사람이 없어서 예전에 ...
    Date2022.02.06 일반 By급식단 Reply10 Views2766
    Read More
  12. No Image

    국내 1위 '디파이'서 22억 턴 그놈들, 7개월 전부터 치밀히 준비

    국내 디파이(DeFi·탈중앙화 금융) 서비스에서 22억원 상당의 암호화폐를 빼돌리는 해킹 사건이 벌어졌다. 해외에선 이미 디파이 해킹 사례가 나오고 있지만, 국내 서비스가 해킹당한 건 이번이 처음이다.   해킹 수법은 ‘보더 게이트웨이 ...
    Date2022.02.06 소식 Bytitle: 가난한카토메구미 Reply5 Views1618
    Read More
  13. No Image

    크롬 브라우저 기반 가상화폐 지갑을 노리는 악성코드

    크롬 브라우저 기반 가상화폐 지갑을 노리는 악성코드 취약점인 Mars Stealer가 발견됐습니다. 2020 Oski 쉘을 기반으로 작동하며 용량은 95kb, WinAPI를 사용해 ASM/C로 제작됐고, 가상화폐 데이터를 훔친 후 스스로를 삭제합니다. 여기...
    Date2022.02.06 소식 By낄낄 Reply0 Views541
    Read More
  14. No Image

    윈도우에 문제가 있는데 해결법 아시는 분 계실까요?

    윈도우 11을 사용중인데 다음과 같은 불편한 증상이 있습니니다.     1. 윈도우 재부팅 안됨.   윈도우를 재부팅을 하면 동그란 원만 돌고 꺼지지를 않습니다. 계속 기다려도 윈도우가 꺼지지를 않고 절전모드에 들어가버리는데 윈도우를 ...
    Date2022.02.05 질문 Byhjk9860 Reply7 Views661
    Read More
  15. 윈도 시스템 로캘을 UTF-8로 바꾸어 보았는데 잘 작동하네요

    윈도11에서 파이썬 프로그래밍 하는데, 터미널에서 유니코드 지원이 제대로 안 되길래, 지역 설정에서 UTF-8을 활성화 해 보았습니다. 그랬더니 잘 작동하네요. 리눅스나 맥에서는 UTF-8이 기본인데 윈도는 그렇지 않아서 불편했거든요. ...
    Date2022.02.05 일반 By부녀자 Reply8 Views1397 file
    Read More
목록
Board Pagination Prev 1 ... 195 196 197 198 199 200 201 202 203 204 ... 577 Next
/ 577

최근 코멘트 30개

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

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


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

sketchbook5, 스케치북5

sketchbook5, 스케치북5

나눔글꼴 설치 안내


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

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

설치 취소