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.13 릴리즈 후보에서 애플 M1의 예비 지원

    리눅스 커널 5.13 릴리즈 후보에서 애플 M1를 예비 지원합니다. M1 시스템에서 부팅은 되는데 모든 기능이 작동하진 않는다네요. 특히 GPU. 하지만 좀 더 개발이 진행된다면 완전 지원도 기대할 수 있겠죠. 그 외에 달라진 점이라면 젠3 ...
    Date2021.05.12 소식 By낄낄 Reply0 Views584
    Read More
  2. No Image

    "돈 끌어가면서 사고는 빈번" 빗썸·업비트 매매 지연에 투자자 '분통'

    11일 가상화폐 거래소 업계에 따르면 빗썸에서 비트코인은 이날 오전 5시쯤 가격이 수 분 내 급등락했다. 빗썸 거래소 화면상 비트코인은 이날 오전 5시 이전까지만 해도 7200만원 안팎에 머물렀으나 오전 5시 8분에 7797만 4000원까지 급...
    Date2021.05.11 소식 By낄낄 Reply5 Views961
    Read More
  3. 이더리움 네트워크의 공급이 비트코인을 넘어섬

    이더리움으로 지불하는 거래 수수료가 늘어나고, 채굴된 블럭이 증가하면서 5월 들어 이더리움은 7188만 달러가 추가됐습니다. 같은 기간에 비트코인은 6640만 달러가 추가됐는데, 이는 이더리움의 공급량이 비트코인을 처음으로 넘어선 ...
    Date2021.05.11 소식 By낄낄 Reply3 Views949 file
    Read More
  4. No Image

    "가상화폐 종류 많으면 불리"..무더기 상폐 오나

    가상화폐 거래소에 자금 세탁 방지 의무를 지우도록 특정금융거래정보법이 바뀌면서 거래소들은 오는 9월까지 고객 실명 계좌를 가진 은행들과 제휴하지 못하면 퇴출당할 가능성이 큽니다. 약 230곳의 거래소 중 실명 계좌를 트고 영업하...
    Date2021.05.10 소식 By낄낄 Reply5 Views1438
    Read More
  5. No Image

    (미국 한정) Google이 VPN 서비스를 시작했습니다.

    다른 웹사이트 돌다 놀라서 가져왔습니다. Google의 유료 멤버십은 Google One이라는 이름이 있더군요. 더 비싼 요금제를 쓸수록 Gmail, 드라이브, 포토 공용 용량이 늘어나는 것만 알았는데 미국에서 2 TB 요금제를 결제하면 Android 기...
    Date2021.05.09 소식 Bytitle: 컴맹임시닉네임 Reply11 Views1537
    Read More
  6. No Image

    5포트 허브의 전력소모량 찍어봤습니다.

    어제 5.5파이 변환케이블 질문하면서 궁금해저서 찍어봤습니다. next 1005gh 모델이구요. 동봉 어댑터 사용했습니다. 어댑터는 5v 1a 5.5파이단자 구요.   대기 :0.9W 클라이언트 2개 사용시 :1.5W​​​​​​​   생각보다 전기 안먹네요. AC-D...
    Date2021.05.09 일반 Bytitle: 명사수SOCOM Reply1 Views879
    Read More
  7. 애플, 2017~2019년에 앱 스토어에 제출된 앱의 35%를 거부

    애플과 에픽 게임즈 사이에서 벌어지는 법정 분쟁 과정에서 별이 별 정보가 다 나오고 있네요. 애플이 2017년부터 2019년까지 매년 평균 500만개의 앱 신청을 받지만, 그 중의 33~35%를 거부했다는 소식입니다. 1년에 평균 170만개가 거...
    Date2021.05.09 소식 By낄낄 Reply3 Views1228 file
    Read More
  8. 1억 2800만명의 iOS 사용자가 XCodeGhost 멀웨어에 감염

    2015년에 한 해커가 아이폰 앱스토어에 수천개의 멀웨어를 넣었습니다. 이는 4천개의 앱에 영향을 주었으나, 구체적으로 얼마나 많은 장치에 감염됐는지는 알려지지 않았습니다. 에픽 게임즈 vs 애플의 재판 과정에서 공개된 이메일에 의...
    Date2021.05.09 소식 By낄낄 Reply8 Views1269 file
    Read More
  9. No Image

    미네소타 대학의 위선 커밋에 대한 리눅스 재단의 최종 입장

    리눅스 재단은 미네소타 대학이 일부 연구팀이 연구 논문을 쓰기 위해 위선 커밋을 올린 사건의 조사를 마쳤습니다. 미네소타 대학은 리눅스 커널에 435개의 코드를 기여했으며, 그 내용을 전부 조사한 결과는 이렇습니다. -정확한 커밋 3...
    Date2021.05.09 소식 By낄낄 Reply4 Views963
    Read More
  10. 윈도우 8.1 작업관리자는 USB전송상황은 안보여주는군요

      저는 작업용컴피타는 몇몇 이유로 윈도우 8.1을 씁니다.   그런데               xcopy를 bat파일로 만들어 놓은걸 이용해서 c드라이브의 특정폴더의 내용을 2개의 usb칩에 물린 2개의 허브에 연결된 usb 메모리에 복사하는데,싸구려에 ...
    Date2021.05.08 일반 By고자되기 Reply6 Views833 file
    Read More
  11. No Image

    Google 기본 애플리케이션이 갑자기 설치되는 경우

    얼마 전에 겪었던 일이라 글 올려봅니다.   대부분의 Android 기기에서, 일부 기본 애플리케이션은 사용을 중지하여 불필요한 애플리케이션을 목록에서 표시하지 않게 하고 저장공간도 확보할 수 있습니다. 이렇게 다 사용 중지를 시켜 두...
    Date2021.05.08 일반 Bytitle: 컴맹임시닉네임 Reply9 Views686
    Read More
  12. No Image

    AMD SCSIAdapter 드라이버가 윈도우 10 부팅 문제를 일으킴

    AMD SCSIAdapter 9.3.0.221 드라이버와 특정 하드웨어를 조합하면 윈도우 10 부팅에 문제가 생긴다는 경험담이 계속 올라오고 있습니다. 여기서 말하는 특정 하드웨어는 기가바이트 어로스 X570 칩셋 메인보드에 집중됩니다. 문제를 겪는 ...
    Date2021.05.08 소식 By낄낄 Reply4 Views804
    Read More
  13. No Image

    윈도우 10X 무기한 연기

    마이크로소프트가 저사양 시스템과 폴더블 디바이스를 위한 경량형 운영체제인 윈도우 10X의 출시를 무기한 연기했습니다. 대신 데스크탑 버전인 윈도우 10의 개선에 초점을 맞출 거라고 합니다. 윈도우 10X는 듀얼 스크린을 지닌 서피스 ...
    Date2021.05.08 소식 By낄낄 Reply9 Views1492
    Read More
  14. 윈도우 10 21H2에서 옛날 아이콘을 삭제

    윈도우 10의 프로젝트 선 밸리는 10월이나 11월에 출시되는 업데이트입니다. 21H2에 해당되지요. 여기에서 윈도우 95 시절에 만들어졌던 아이콘들, 그러니까 플로피 디스크나 최대 절전 모드 같은 아이콘들이 전부 제거됩니다. 또 새로운 ...
    Date2021.05.08 소식 By낄낄 Reply6 Views1189 file
    Read More
  15. No Image

    일본 소프트뱅크가 일본 라쿠텐 모바일을 고소

    일본 소프트뱅크가 일본 라쿠텐 모바일을 고소했습니다. 1000억엔의 손해 배상을 요구하고 영업 기밀을 폐기하라는 게 소프트뱅크의 주장입니다. 소프트뱅크의 전 직원이 영업 비밀인 4G/5G 네트워크 관련 기술 정보를 라쿠텐 모바일에 유...
    Date2021.05.08 소식 By낄낄 Reply0 Views515
    Read More
목록
Board Pagination Prev 1 ... 266 267 268 269 270 271 272 273 274 275 ... 579 Next
/ 579

최근 코멘트 30개

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

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


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

sketchbook5, 스케치북5

sketchbook5, 스케치북5

나눔글꼴 설치 안내


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

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

설치 취소