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

    북한 해킹 그룹이 로닌 블록체인 네트워크에서 6억 2500만 달러를 훔침

    미국 재무부는 북한의 해킹 그룹인 라자루스가 NFT 게임인 액시 인피니티를 해킹해 6억 2500만 달러를 훔쳤다면서, 라자루스의 이더리움 지갑을 제재 대상 목록에 올렸다고 발표했습니다. 라자루스의 이더리움 지갑에는 4억 4624만 달러가...
    Date2022.04.16 소식 By낄낄 Reply4 Views1533
    Read More
  2. No Image

    레딧, 댓글 검색 기능 추가

    레딧이 16년만에 드디어 댓글 검색 기능을 추가했습니다. 지금까지는 글을 누른 후에 수천개의 댓글을 스크롤해가며 원하는 정보를 찾아야 했지만, 이제는 댓글을 바로 검색할 수 있습니다. 또 검색 관련성을 높였습니다. 지금까지는 100%...
    Date2022.04.16 소식 By낄낄 Reply0 Views455
    Read More
  3. No Image

    이더리움의 지분 증명 변환이 또 연기

    이더리움의 지분 증명 변환이 또 연기됐습니다. 원래는 6월이었지만 거기서 몇 달 더 기다려야 한다고 이더리움 개발자가 밝혔습니다. 이더리움의 지분 증명 변환은 The Merge라 불리며, 이를 도입하면 기존의 작업 증명 방식에 비해 그래...
    Date2022.04.16 소식 By낄낄 Reply9 Views1000
    Read More
  4. No Image

    메타의 NFT 판매 수수료, 가격의 절반

    페이스북의 모회사인 메타는 가상현실 플랫폼인 호라이즌 월드에서 메타버스 컨텐츠를 NFT로 만들어 판매할 예정입니다. 메타퀘스트 스토어에서 30%의 하드웨어 플랫폼 수수료와 호라이즌 월드의 수수료까지 합쳐 총 47.5%의 수수료를 요...
    Date2022.04.15 소식 By낄낄 Reply8 Views1307
    Read More
  5. No Image

    북한 가상화폐에 도움을 준 해커에게 5년형 선고

    버질 그리피스는 2019년에 평양에서 열린 가상화폐 컨퍼런스에 참가해, 가상화폐 인프라와 장비에 대해 조언을 했습니다. 미국 정부의 방문 불허에도 불구하고 말이죠. 그래서 미국 법원은 5년형과 10만 달러의 벌금을 선고했습니다. 북한...
    Date2022.04.15 소식 By낄낄 Reply0 Views704
    Read More
  6. No Image

    CPU-Z, 라이젠 7000과 랩터레이크 지원

    CPU-Z의 새 버전인 2.0.1이 나왔습니다. 라이젠 7000과 랩터레이크 13세대 코어 프로세서를 지원한다고 나와 있네요. 그리고 6GHz 이상의 높은 클럭을 검증하는 과정이 개선됐습니다. Glenfly Arise-GT10C0 GPU. Intel Core i9-12900T, Co...
    Date2022.04.15 소식 By낄낄 Reply0 Views529
    Read More
  7. No Image

    290만 달러 주고 산 첫번째 트윗의 NFT, 이제는 6222달러

    트위터 공동 창업자, 잭 도시의 첫번째 트윗을 NFT로 만들어 경매에 부쳤더니 290만 달러에 팔렸습니다. 그리고 이 NFT를 NFT 장터에서 다시 판매하면서, 2500만 달러 이상에 팔릴 거라 기대하고 수익의 절반을 기부하겠다고 밝혔는데요. ...
    Date2022.04.14 소식 By낄낄 Reply7 Views1071
    Read More
  8. No Image

    일론 머스크, 트위터를 410억 달러에 적대적 인수합병

    뭐 그렇다고 합니다... 1주당 54.2달러씩 쳐서 인수한다네요...   아마 자신은 절대 블락 못하게 할 생각인거 같은데 말이죠...   이거 테슬라에 이제 트위터 클라이언트가 무조건 실리는게 아닌가...
    Date2022.04.14 소식 Bytitle: 폭8책읽는달팽 Reply14 Views1962
    Read More
  9. 러시아군 정보가 신나게 탈탈 털리는 중

    트랙터에게 끌려갈 운명을 가진...   부차학살과 연루된거 같은 러시아군의 1600명의 신상이 털렸습니다. 이름, 나이, 여권번호, 직장등등...   근데 이게 처음은 아닙니다. 러시아 연방의 FSB 데이터(?!)도 털렸습니다. 620명의 데이터...
    Date2022.04.14 소식 Bytitle: 폭8책읽는달팽 Reply3 Views1357 file
    Read More
  10. No Image

    양자 컴퓨터에 털리지 않으려는 OpenSSH 9 발표

    OpenSSH 가 9 버전을 내놨습니다.   본격적으로 양자컴에 털리지 않을려고 하는 목표로, 레거시 SCP/RCP 에서 SFTP 프로토콜로 이전합니다.   또한 암호도 새로 바꿨습니다. 격자 기반 암호로 암호화 하는 NTRU에서 생성한 소수 + x25519 ...
    Date2022.04.13 소식 Bytitle: 폭8책읽는달팽 Reply6 Views1416
    Read More
  11. 요새 관공서는 무조건 앱으로 알림을 보내고 보는군요

    우편이나 문자보다 앱을 통한 안내문 발송이 돈이 덜 들어가고, 효율적인 부분도 있다는 건 인정합니다만. 해당 앱을 안내문 확인용으로 쓰지를 않으며, 발송에 동의도 하지 않았는데 무조건 여기로 보냈다고 통보하는 건 참 못마땅하네요...
    Date2022.04.13 일반 By낄낄 Reply23 Views1261 file
    Read More
  12. 구글 광고는 접속 기록만으로 결정되는 게 아닙니다

    구글 광고에서 이상한 게 뜬다는 글이 올라오면 '니가 평소에 그런 걸 봐서 그렇지'라고 댓글을 쓰는 사람들이 많습니다. 기글 말고 다른 사이트 이야기입니다만. 애드센스가 표시할 광고를 정할 때, 사용자의 검색/접속 기록을 ...
    Date2022.04.13 일반 By낄낄 Reply26 Views1467 file
    Read More
  13. No Image

    구글:iOS에서 PIP지원한다는거 사실 유튜브 아니었음ㅎㅎ

    맥루머스에 따르면 구글은 유튜브에도 적용한다는 초기주장에서 물러서 iOS에선 유튜브TV만 PIP를 지원한다고 입장을 변경하였답니다. 유튜브 TV는 TV스트리밍을 위한 100% 유료서비스이니 구글의 입장에서도 iOS를 지원하면 안드도 무료...
    Date2022.04.13 소식 ByElsanna Reply2 Views1070
    Read More
  14. No Image

    머스크, 트위터 지분 취득 재신고…“원하면 언제든 추가매입”

    일론 머스크 테슬라 최고경영자(CEO)가 미 증권거래위원회(SEC)에 트위터 지분 취득 신고서를 다시 제출했다. 머스크는 여기에 ‘원하면 언제든 지분을 추가 매입할 수 있다’는 내용을 담았다 트위터는 이사회 일원이 회사 지...
    Date2022.04.13 소식 By낄낄 Reply2 Views619
    Read More
  15. No Image

    디링크 구형 라우터에 심각한 취약점이 존재, 폐기 권고

    디링크(D-Link)의 일부 인터넷 공유기에 CVE-2021-45382 취약점이 존재합니다. 원격으로 명령을 실행하는 취약점인데, 공격자가 악성 코드를 넣어 액세스 권한을 획득할 수 있습니다. 여기에는 DIR-810L, DIR-820L/LW, DIR-826L, DIR-830L...
    Date2022.04.12 소식 By낄낄 Reply21 Views3223
    Read More
목록
Board Pagination Prev 1 ... 184 185 186 187 188 189 190 191 192 193 ... 579 Next
/ 579

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

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


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

sketchbook5, 스케치북5

sketchbook5, 스케치북5

나눔글꼴 설치 안내


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

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

설치 취소