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. 윈도우 11, 윈도우 10보다 보급률이 2배

    마이크로소프트는 컴퓨텍스 2022의 강연에서 윈도우 11의 보급률이 윈도우 10의 2배라고 밝혔습니다. 현재 점유율이 아니라 확산되는 속도를 가리킨 듯 합니다. 그리고 하이브리드 워크에 최적화된 운영체제가 윈도우 11이고, 윈도우 365...
    Date2022.05.25 소식 By낄낄 Reply17 Views1497 file
    Read More
  2. No Image

    ‘테라’ 권도형 “싱가포르 있다”더니…현지 사무실 폐쇄

    가상자산(암호화폐) 테라(UST)·루나(LUNA) 코인을 개발한 테라폼랩스(TerraformLabs) 권도형 최고경영자(CEO)의 싱가포르 현지 사무실이 현재는 운영되지 않는 것으로 확인됐다. 불과 며칠 전 권 대표는 트위터를 통해 “나는...
    Date2022.05.23 소식 By낄낄 Reply15 Views1343
    Read More
  3. No Image

    애플, 여러 나라에서 애플 뮤직의 학생용 구독료 인상

    애플이 호주, 필리핀, 싱가포르, 말레이시아, 사우디 아라비아, 뉴질랜드, 인도, 남아프리아 공화국, 인도네시아, 이스라엘, 케냐에서 학생용 애플 뮤직 구독 요금제를 1.49달러에서 1.99달러로 올렸습니다.
    Date2022.05.23 소식 By낄낄 Reply1 Views895
    Read More
  4. No Image

    윈도우 10 KB5011831에서 CET 충돌로 생긴 문제를 수정

    윈도우 10의 KB5011831 핫픽스를 설치한 후, 마이크로소프트 스토어에서 앱을 설치하면 0xC002001B 오류 코드가 뜨거나 앱이 열리지 않는 문제가 있습니다. 11세대 이상 코어 프로세서나 일부 AMD 프로세서 등, CET(Control-flow Enforcem...
    Date2022.05.23 소식 By낄낄 Reply1 Views807
    Read More
  5. No Image

    '쿠팡' 같은 제품인데…'와우' 유료 회원이 더 비싸다?

    더 많은 할인 혜택 준다며, 유료 회원을 모으는 쇼핑몰이 늘고 있죠. 쿠팡이 그 선두에 있다고 볼 수 있는데요. 그런데 쿠팡 유료 회원들 사이에서 좀 더 싸게 사려고 가입했더니, 나한테 더 비싸게 팔고 있다, 잡은 물고기라 그러냐 하는...
    Date2022.05.23 소식 By낄낄 Reply9 Views1212
    Read More
  6. 유튜브 PC버전 설정 저처럼 뜨는지 궁금해요

      원래 여기 AV1 관련 설정이 있었다는데 안보이네요. 저만 안보이는 걸까요?   AV1 코덱이 점점 늘어나는데 구형그래픽카드라서 문제네요 ㅠ   +))))웨일입니다   답변보고 이것저것 만져봤는데 예전에 깔은 not yet av1 확장이 설정 자...
    Date2022.05.22 질문 Bytitle: 명사수M16 Reply10 Views1402 file
    Read More
  7. [잡담] 2022년 5월, YouTube Vanced 설치하기

    3개월여 전, 부친 기기에 설치해드린 적이 있었고 그 기기에서 manager.apk를 가져왔습니다.   놀랍게도 다운로드가 아직 됩니다. manager.apk만 있다면 미러 사이트 갈 필요가 없군요.
    Date2022.05.21 일반 Bytitle: 컴맹임시닉네임 Reply4 Views1349 file
    Read More
  8. No Image

    1100만 구독자 유튜브 계정을 90만에 팔겠다는 사람 등장

    SkyDoesMinecraft라는 유튜브를 운영하는 사람이 자신의 계정을 팔겠다고 글을 올렸습니다. 구독자 수는 1120만명이고 가격은 90만 달러이며, 채널을 이전하기 전에 기존 컨텐츠는 삭제합니다. https://fameswap.com/listing/162445-youtu...
    Date2022.05.21 소식 By낄낄 Reply2 Views1495
    Read More
  9. No Image

    로빈후드, 올해 안에 Web3 비 보관 가상화폐 지갑을 출시

    로빈후드가 올해 안에 Web3 비 보관 가상화폐 지갑을 출시한다고 발표했습니다. 비 보관 지갑이라고 해서 가상화폐를 보관하지 않는다는 게 아니라 가상화폐 개인 키를 저장하지 않는다는 소리입니다. 보안은 우수하지만 비 보관 지갑과 ...
    Date2022.05.21 소식 By낄낄 Reply1 Views601
    Read More
  10. No Image

    중국 Github 짭, 프라이빗 저장소에 코드 리뷰 한다고 하다 연기

    중국정부는 Github대신 Gitee를 밀고 있죠...   여튼, Gitee가 프라이빗 저장소에 코드 리뷰를 시행하겠다고 해서 난리가 났습니다.   일단 연기인데, 왜 코드 리뷰를 시행하는지는.... 말할수 없습니다 자세네요.   그것보다 한국이나 다...
    Date2022.05.21 소식 Bytitle: 폭8책읽는달팽 Reply6 Views1189
    Read More
  11. FreeBSD 13.1 릴리즈

    늦었지만, FreeBSD 13.1이 나왔습니다. 64비트 RISC-V 지원이 추가 되었습니다. 그러나 OpenBSD는 애플 실리콘 지원이 추가되어서... 많이 가져가고 기여한 애플측이 노는게 아닌가... 싶기도 하네요.     Some of the highlights: OpenSS...
    Date2022.05.21 소식 Bytitle: 폭8책읽는달팽 Reply0 Views730 file
    Read More
  12. 유튜브 동영상 플레이어, 사람들이 많이 보는 부분을 표시

    유튜브 동영상 플레이어에 새로운 기능이 추가됩니다. 사람들이 가장 많이 보는 부분이 어디인지를 표시하는 그래프가 추가됩니다. 또 하나의 영상만 반복 재생이 가능합니다.
    Date2022.05.20 소식 By낄낄 Reply6 Views1741 file
    Read More
  13. No Image

    윈도우 11 인사이더, 가젯 기능을 테스트

    윈도우 11 인사이더 Dev 채널에서 프리뷰 빌드 25120을 테스트 중입니다. Dev 채널 빌드에는 실제로 출시되지 않을 실험적인 기능도 추가되는데요. 이번 버전에는 인터랙티브 컨텐츠를 표시하는 기능을 위젯 보드에 추가하고, 비스타 시절...
    Date2022.05.19 소식 By낄낄 Reply1 Views718
    Read More
  14. ??? : 아 지하철 5G 28GHz 못해먹겠다고

    이통사, 지하철 5G 28㎓ '난색' (naver.com) 이통사 3사가 지하철 5G 28GHz 구축은 부담이 된다는 의견서를 과학기술정보통신부에 제출했다는 기사입니다 관계자는 전국지하철에 5G 28Ghz망을 구축할 경우 3사 합쳐서 4000~5000억원의 예...
    Date2022.05.19 소식 By공탱이 Reply22 Views2260 file
    Read More
  15. No Image

    구글 러시아, 러시아 정부에게 통장뺏겨 파산신청

    구글 러시아가 러시아 정부에게 통장 뺏겨서 파산을 준비중입니다. 이 회사는 작년에 2백만달러의 순이익을 냈으나... 요번 전쟁으로 인해서 후략...   The Russian authorities' seizure of Google Russia's bank account has made it un...
    Date2022.05.19 소식 Bytitle: 폭8책읽는달팽 Reply6 Views1260
    Read More
목록
Board Pagination Prev 1 ... 176 177 178 179 180 181 182 183 184 185 ... 579 Next
/ 579

최근 코멘트 30개
아이들링
21:12
Kylver
21:11
니코다이스키
21:09
쿠쿠다스
21:02
GPT
20:59
투명드래곤
20:54
투명드래곤
20:53
유에
20:47
포인트 팡팡!
20:46
슬렌네터
20:43
급식단
20:22
능구
20:06
렉사
20:05
Induky
20:04
Induky
20:02
Induky
20:02
아쉘리아
19:46
소고기죽
19:27
검은숲
19:21
cowper
19:21
Kylver
19:14
wwsun98
18:27
TundraMC
18:20
쿠클라델
18:20
CKyuJay
18:20
툴라
18:19
애플마티니
18:18
kerberos
18:15
AKG-3
18:11
야생감귤
18:09

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

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


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

sketchbook5, 스케치북5

sketchbook5, 스케치북5

나눔글꼴 설치 안내


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

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

설치 취소