2의 승수 있잖아?


2의 3승은 8이고..

2의 4승은 16이고..

2의 5승은 32고.. 뭐 이런것들..


근데 뒷자리 숫자로 앞자리 숫자를 구할때..


그러니까..


2의 몇승이 1024인지 확인하고 싶을때가 있을때..


cmath include해서 log2() 함수로 구할수도 있지만, 실수연산이라 오버헤드가..


cstring include해서 ffs()라는 함수가 있다.


find first bitset이라고 설명이 되어있고..


gcc에서 잘 동작하는 코드임..

#include <strings.h>
int ffs(int i);
#define _GNU_SOURCE
#include <string.h>
int ffsl(long int i);
int ffsll(long long int i);
신고

'Application > C/C++' 카테고리의 다른 글

2의 역승수  (0) 2016.05.01
2015년 3월 22일 과제  (0) 2015.03.29
QtNetwork를 사용하려면  (0) 2014.10.23
nCurses 페이스북 그룹 내용 백업  (0) 2014.05.04
객체지향의 이해  (0) 2014.04.04
Source Insight 3.5  (0) 2014.02.17

QT로 메모장 만들기



notepad.zip


신고

'Application > C/C++' 카테고리의 다른 글

2의 역승수  (0) 2016.05.01
2015년 3월 22일 과제  (0) 2015.03.29
QtNetwork를 사용하려면  (0) 2014.10.23
nCurses 페이스북 그룹 내용 백업  (0) 2014.05.04
객체지향의 이해  (0) 2014.04.04
Source Insight 3.5  (0) 2014.02.17

QT Creator로 이것저것 만드는데 network을 사용할 일이 생겼다.


그런데 웬지 error: undefined reference to `QNetwork::~QNetwork()'이란 에러가 나네?



이럴 경우엔 프로젝트파일(ex: project.pro)에


QT += core gui


라고 되어 있을텐데,


요기에 network를 추가한다.


QT += core gui network


요렇게.


그럼 알아서 라이브러리 다 갖다쓴다.

신고

'Application > C/C++' 카테고리의 다른 글

2의 역승수  (0) 2016.05.01
2015년 3월 22일 과제  (0) 2015.03.29
QtNetwork를 사용하려면  (0) 2014.10.23
nCurses 페이스북 그룹 내용 백업  (0) 2014.05.04
객체지향의 이해  (0) 2014.04.04
Source Insight 3.5  (0) 2014.02.17

여러가지 대안들이 있으며, 활동하기에 어려운 점이 있어 폐쇄함.

일단 거기서 나온 이야기는 백업.


기본적인 화면 구성은 curses.h 만 가지고도 가능하다.

ncurses는 curses.h의 wrapper.


윈도우에서는 PDCurses를 사용할 수 있다.

Visual C++에서 사용가능


<pre>

/* Hello Curses on Windows */

#include <tchar.h>
#include <curses.h>

int _tmain(int argc, _TCHAR* argv[])
{
  initscr();
  mvprintw(10,20,"Hello, Curse");
  refresh();
  getchar();
  endwin();
  return 0;
}

</pre>


문자 'A'와 문자열 "A"는 다르다. 선언해야 할 Type이 다름!


테트리스와 인베이더의 만남

http://www.oldschoolapps.com/arcade/flash-games/1443-retro-mash-tetris-meets-space-invaders


레퍼런스

https://wiki.kldp.org/wiki.php/NCURSES-Programming-HOWTO


포인터를 이용해서 메모리 내용을 보여주는 프로그램을 만들었습니다. 아직 ncurses로 만들어 지지 않았구요.. 만든다면 창을 하나 띄워서 주소 검색등을 해보게 할 수 있겠네요.

<pre>

// 포인트를 이용하여, 메모리 주소값과 주소를 출력하시오.
#include <stdio.h>

int main()
{

  //char word[30] = "hello"; // 문자열의 저장방식을 보기 위해 문자열 선언과 대입.
  //int A = 0xabcdef88; // 스택구조상 메모리의 흐름을 보기위해 변수 선언과 대입.
  int i_num = 0xAA; // 알아보기 쉽도록 16진수로 값을 넣어둔다.
  int i_cnt; // 기본적인 for 문을 위한 카운터 변수.
  int i_loop;
  unsigned char *ucp = (unsigned char *)&i_num; // 가르키는 선언 값에 따라 올바르게 타입을 캐 스팅.
  printf("-------------------------------------------------------------------------------------------\n" "Address ");

  // 안내 주소를 00부터 0F까지 출력 시작.
  for(i_cnt = 0;i_cnt <= 15;++i_cnt)
  {
    printf("%02X ", i_cnt);
  }
  // 안내 주소 출력 끝.
  printf(" ASCII\n");

  // 주소와 메모리 출력 시작.
  for(i_loop = 0; i_loop <= 10;++i_loop) // i_loop 값의 변경으로 몇줄을 뽑을지 정할 수 있다.
  {
    printf("%08X ", ucp); // 주소 출력.

    for(i_cnt = 0;i_cnt <= 15;++i_cnt) // 저장된 값을 16진수로 두 글자씩만 출력하고 .
    {
      printf("%02X ", *(ucp + i_cnt));
    }

    // ASCII 문자를 출력 시작.
    for(i_cnt = 0;i_cnt <= 15;++i_cnt)
    {
      if(' ' <= *((signed char*)ucp + i_cnt)) // ASCII 코드 출력시 입력문자가 있을 경우 도트를 출력한다.
      { // 그 외 아스키문자중 제어문자의 마지막인 스페이스보다
        printf("%c", *(ucp + i_cnt));
      }
      else
      {
        putchar('.');
      }
    }
    printf("\n");
    // ASCII 문자를 출력 끝.

    ucp = ucp + 16; // 다음 줄의 메모리 주소를 계산후 대입.
  }
  return 0;
}

</pre>


<pre>

  // 처음 선언되는 변수의 주소값을 기준으로 16 x 10의 16진수 메모리 맵을 출력한다.
// 포인터 변수의 주소 연산과 포인터 변수가 가리키는 값의 주소를 출력하는 것이 목적이다.
// 보기 좋은 화면을 위해 기준이 되는 변수의 마지막 1바이트 값을 가이드 주소로 출력되게 했다.
// 간단한 파일 출력을 동시에 수행한다. memory_status.txt 라는 파일을 만들어 결과를 저장한다.
//
// 주석을 명료하며 되도록이면 다른 사람이 보고 이해하기 쉽도록 적었다.
// 2012년 5월 11일.
#include <stdio.h>

int main()
{

int i_loop;
int i_num = 0xABCDEF88;
int i_cnt;

FILE *fpout; // 파일 포인터 변수 선언.

unsigned char *c_num_ptr = (unsigned char *) &i_num;

fpout = fopen("memory_status.txt", "w"); // fpout 변수에 텍스트파일을 쓰기가 가능하게 불러온다.

// 가이드 문구 시작.
printf("---------------------------------------------------------------------------------\n"
" Address ");

// 주소 마지막 바이트 출력 시작 : 불러들인 주소의 마지막 한 바이트를 알아보기 쉽게 띄워준다.
for(i_cnt = 0;i_cnt <= 15;++i_cnt)
{
printf("%02X ", ((unsigned char)c_num_ptr + i_cnt));
//fprintf(fpout, "%02X ",((unsigned char)c_num_ptr + i_cnt));
}
// 주소 마지막 바이트 출력 끝.

printf(" ASCII CODE \n");
//fprintf(fpout, "\n", i_num);
// 몸체 시작. : 주소와 해당 주소의 실제값을 1 바이트 단위로 출력, 아스키 코드 표시.
for(i_loop = 0;i_loop <= 10;++i_loop) // 몇 줄의 주소를 띄울 것인가를 i_loop의 비교값으로 결정.
{
printf("%08x ", c_num_ptr); // 주소 출력
fprintf(fpout, "%08x ", c_num_ptr); // 텍스트 파일 출력.

// 1바이트씩 주소 값을 출력 시작. :
for(i_cnt = 0;i_cnt <= 15;++i_cnt)
{
printf("%02x ", *(c_num_ptr + i_cnt));
fprintf(fpout, "%02x ", *(c_num_ptr + i_cnt)); // 텍스트 파일 출력.
}
// 1바이트씩 주소 값을 출력 끝. :

// 값에 대한 아스키 코드 출력 시작.
for(i_cnt = 0;i_cnt <= 15;++i_cnt)
{
if(' ' < *(((signed char *)c_num_ptr) + i_cnt)) // 제어문자 스페이스의 십진수 값은 32.
{ // 이 값보다 출력 값이 크면 해당 아스키를 뿌리는데 이때
printf("%c", *(c_num_ptr + i_cnt)); // 제대로 표현할 확장 아스키를 걸러주기 위해 signed char 캐스팅.
fprintf(fpout, "%c", *(c_num_ptr + i_cnt)); // 텍스트 파일 출력.
}
else
{
putchar('.'); // 아스키값이 32 미만이거나 127 이상일 경우에는 점(도트)를 찍어준다.
fprintf(fpout,"."); // 텍스트 파일 출력.
}
}
printf("\n"); // 한줄이 끝나고 개행(줄바꿈)
fprintf(fpout, "\n"); // 텍스트 파일 출력.
c_num_ptr = c_num_ptr + 16; // 다음 줄의 올바른 주소값은 위에서 16바이트를 출력했으니 다음줄은 기준이 되고 있는 첫바이트> 보다 16이 많다.
}
fclose(fpout); // 파일을 닫아준다.
return 0;

</pre>


터미널에서 어떤 프로그램 실행하다 죽거나 취소했을때 터미널이 병신이 되면?

#stty sane



신고

'Application > C/C++' 카테고리의 다른 글

2015년 3월 22일 과제  (0) 2015.03.29
QtNetwork를 사용하려면  (0) 2014.10.23
nCurses 페이스북 그룹 내용 백업  (0) 2014.05.04
객체지향의 이해  (0) 2014.04.04
Source Insight 3.5  (0) 2014.02.17
배열 초기화  (1) 2013.08.17

문득 갑자기 객체지향을 설명할 수 있을것 같다.
사실 객체지향이라는 말부터 이해가 안되잖아..
근데 Object-Oriented라고 하면 오히려 좀더 이해가 되는 느낌.. -.-
C++의 Class와 Java의 Class가 등장하면서 객체지향이라는 말을 많이 쓰는데,
뭐, 각각의 함수에 인자만 주고 함수 내에서 거의 대부분을 해결하는 느낌?
그러니까, 함수가 각각의 Sandbox로, 각 기능별로 기능 안에서 필요한 변수는 그 기능 안에 다 들어가야 한다는것.
간단한 프로그램에서는 절차지향이 훨씬 낫지만,

프로그램이 커지게 되면, 암기력이 굉장히 좋지 않은 이상,
내가 어떤 변수를 할당했는지 모르게 된다.
뭐, 어차피 클래스 하나 짜는게 짧은 프로그램 하나 짜는 느낌이니 부담이 없는거고,
함수 테스트를 할때도 편하고..
굳이 메인쪽 프로세스를 몰라도 되는거니 불필요하게 외울것들이 없어져서 그런거다.

일단, 객체지향을 말하는 사람이 객체지향에 대해 장황하게 설명하는건,
객체지향에 대해서 전혀 모르거나,
Hello World급의 예제를 예로 들자니, 객체지향의 장점을 설명하기가 힘들어서 그런 것.

왜 그런지 Code로 봅시다..

--- 절차지향 ---
#include 
int main(int argc, char *argv[])
{
  string a = "Hello, World";
  std::cout << a << std::endl;
  return 0;
}
--- 객체지향 ---
#include <iostream>
class Print
{
public:
  int setStr(string str)
  {
    _str = str;
    if(_str == str) return 0;
    return -1;
  }
  string getStr()
  {
    return _str;
  }
  void print()
  {
    std::cout << _str << std::endl;
  }
private:
  string _str;
};

int main(int argc, char *argv[])
{
  Print prn;
  prn.setStr("Hello, World");
  prn.print();
  return 0;
}
신고

'Application > C/C++' 카테고리의 다른 글

QtNetwork를 사용하려면  (0) 2014.10.23
nCurses 페이스북 그룹 내용 백업  (0) 2014.05.04
객체지향의 이해  (0) 2014.04.04
Source Insight 3.5  (0) 2014.02.17
배열 초기화  (1) 2013.08.17
nCurses application static build  (0) 2013.08.13

SI3US-845855-44504

Si3566Setup.exe


저작자 표시
신고

'Application > C/C++' 카테고리의 다른 글

nCurses 페이스북 그룹 내용 백업  (0) 2014.05.04
객체지향의 이해  (0) 2014.04.04
Source Insight 3.5  (0) 2014.02.17
배열 초기화  (1) 2013.08.17
nCurses application static build  (0) 2013.08.13
QT 제목 표시줄 없애기  (0) 2013.07.03

배열 초기화는 걍 memset 쓰거나 for문 돌리는게 속편해


1. int a[10] = { 0 };


2. int a[10] = { 0, };


3. int a[10];
  memset ( a, 0, 10 );


4. int a[10], i;

  for(i = 0; i < 10; i++)

  {

    a[i] = 0;

  }


0으로 초기화할거면 상관없는데, 다른 값으로 초기화 할거면 1, 2번은 쓰면 안돼.

a[0]만 바뀔거야. a[1]에서 a[9]는 0 됨.


그리고 사실 가장 직관적인건 4번이지. 느리겠지만.


1번이랑 2번 차이가 있을까?


없어. 자꾸 2번이 맞다고 하는 사람이 꽤 되는데, 개뿔이 맞니?


2번이 맞다는 분들 근거제시좀?

저작자 표시
신고

'Application > C/C++' 카테고리의 다른 글

객체지향의 이해  (0) 2014.04.04
Source Insight 3.5  (0) 2014.02.17
배열 초기화  (1) 2013.08.17
nCurses application static build  (0) 2013.08.13
QT 제목 표시줄 없애기  (0) 2013.07.03
itoa - Integer TO AscII  (0) 2013.06.11
  1. 행인a 2013.08.28 19:59 신고

    두번째 배열초기화 방식은 비표준화된 방식으로, 일부 컴파일러에서 통용된다 카더라합니다.

현재 사용중인 Linux Version은 Debian 7 Wheezy 64bit


난 웬지 static build를 좋아하는 듯하다.


뭐 일단 nCurses Example이라는 이름으로 예제파일을 돌리고 있다. 코드는 여기 https://github.com/drakekr/ncurse-exam


컴파일


cc -o hello hello.c -lncurses


ㅇㅋㅇㅋ 짱잘됨!


그럼 static으로


cc -o hello hello.c -lncurses -static


에러를 쫙 뱉네?


음.. 라이브러리 참조가 안된다는 에러가 나오는데..


뭐야? 파일은 있는데 왜 안돼?



먼저 소스컴파일을 해보기로 했다.


apt-get source libncurses5


아따, 잘 받아지네잉


드가서 ./configure하고 make하고 sudo make install 했다.


아따 문제없구마이


다시 컴파일


cc -o hello hello.c -lncurses -static


똑같네 씨바?


뭐가문제인고 보니 library 참조 디렉토리 우선순위가 일단 /usr/lib/x86_64-linux-gnu부터 훑고 지나가네?


근데 거기 -fPIC 적용된 옛날거 libncurses.a가 있거든


그러니까 라이브러리 직접 지정하는 방법이 있더라고.


아까 빌드한건 /usr/lib에 라이브러리가 저장됐거든.


이렇게 하면 돼.


gcc -o hello hello.c -l:/usr/lib/libncurses.a -static


libncurses 소스컴파일하면 libmenu.a도 생겨.


ncurses 라이브러리 쓰면 menu 라이브러리 거의 다 쓰잖아?


gcc -o hello hello.c -l:/usr/lib/libncurses.a -l:/usr/lib/libmenu.a -static


LIB_PATH 잡아주는 방법도 있고, 아예 library 지정해주는 방법도 있지.


편한거 골라쓰면 됨미다.

저작자 표시
신고

'Application > C/C++' 카테고리의 다른 글

Source Insight 3.5  (0) 2014.02.17
배열 초기화  (1) 2013.08.17
nCurses application static build  (0) 2013.08.13
QT 제목 표시줄 없애기  (0) 2013.07.03
itoa - Integer TO AscII  (0) 2013.06.11
MFC Split  (0) 2012.09.11

setWindowFlags(Qt::FramelessWindowHint);

저작자 표시
신고

'Application > C/C++' 카테고리의 다른 글

배열 초기화  (1) 2013.08.17
nCurses application static build  (0) 2013.08.13
QT 제목 표시줄 없애기  (0) 2013.07.03
itoa - Integer TO AscII  (0) 2013.06.11
MFC Split  (0) 2012.09.11
[강좌] 블럭쌓기 만들기 13일차  (0) 2012.06.17
  • sprintf(str,"%d",value) converts to decimal base.
  • sprintf(str,"%x",value) converts to hexadecimal base.
  • sprintf(str,"%o",value) converts to octal base.


저작자 표시
신고

'Application > C/C++' 카테고리의 다른 글

nCurses application static build  (0) 2013.08.13
QT 제목 표시줄 없애기  (0) 2013.07.03
itoa - Integer TO AscII  (0) 2013.06.11
MFC Split  (0) 2012.09.11
[강좌] 블럭쌓기 만들기 13일차  (0) 2012.06.17
[강좌] 블럭쌓기 만들기 12일차  (0) 2012.06.17

+ Recent posts