프로그래밍/C2015.07.11 21:24

새로운 노드의 주소는 항상 같은 offset을 두고 생성될까? 적어도 주소의 절대값이 줄지는 않은 거 처럼 보이는데....

신고
Posted by code cat
프로그래밍/C++2015.03.23 10:13

갑자기 C++ 소스를 봐야 하는데, 워낙 양이 많아서 전체적으로 틀을 보고 싶은데, class diagram이 있었음 했다.

그런데 그리자니... 노동력이 많이 들어가고... 그래서 찾아보았다.

우선 autodia라는 툴이 있는데, 설치가 조금 까다롭다.(적어도 perl을 안 써본 사람한테는)

그리고 무엇보다, 동작을 제대로 안한다.(이건 내 경우에 한해서)

template이라는 툴까지 잘 깔고 문제 없는 듯 한데, 정작 language를 인식 못한다.(혹시 db를 어디 깔아야 되는건가????)



그래서 이리 저리 찾다가 완벽하지는 않은데, 나름 유용한 툴이 있다.

cpp2dia(http://cpp2dia.sourceforge.net/)라고 

소스 받고 설치 후에 c++소스가 있는 곳에 가서 다음과 같이 실행하면 된다.



tclsh $설치경로/cpp2dia.tclssh 



그러면 output.dia라는 파일이 나오고, 이를 dia-normal 같은 어플리케이션을 통해서 보면된다.(jpeg, png로도 export가능하다)


올해 안에 python으로 비슷한 걸 한번 만들어봐야겠다.

신고

'프로그래밍 > C++' 카테고리의 다른 글

[c++] UML autogenerator  (2) 2015.03.23
생성자 호출 방법  (0) 2015.03.19
[에러] jump to case label -fpermissive  (0) 2014.02.19
[template]템플릿 예제  (0) 2013.08.04
null pointer vs stray pointer  (0) 2013.05.26
[c++] malloc/free 대신 new/delete을 쓰는 이유?  (0) 2013.05.18
Posted by code cat
프로그래밍/C++2015.03.19 18:38

출처: C++ 에스프레소

생성자 호출 방법 중 실수할 수 있는 경우가 있다.

Car c1;                         //default constructor 호출
Car c2();                       // c2()라는 함수 원형선언, constructor 호출 아님!
Car c3(100, 3, "white");      // constructor 호출
Car c4 = Car(0, 1, "blue");   // 먼저 임시 객체를 만들고 이것을 c4에 복사

2번째의 경우 아무생각없이 하다가 쓸 수 있는 방법인데, 잘못된 방법이다.

신고

'프로그래밍 > C++' 카테고리의 다른 글

[c++] UML autogenerator  (2) 2015.03.23
생성자 호출 방법  (0) 2015.03.19
[에러] jump to case label -fpermissive  (0) 2014.02.19
[template]템플릿 예제  (0) 2013.08.04
null pointer vs stray pointer  (0) 2013.05.26
[c++] malloc/free 대신 new/delete을 쓰는 이유?  (0) 2013.05.18
Posted by code cat
프로그래밍/C2015.01.15 18:11
error: aggregate value used where an integer was expected

위와 같은 에러를 본다면, 아마도 구조조체의 멤버 대신 구조체를 직접 integer로 캐스팅하려는 실수를 했을 때 나오는 것이다.

신고
Posted by code cat
프로그래밍2014.12.26 14:02

엑셀은 포스팅 안하는데 아래팁은 좀 많이 편해서...

우선 원하는 셀에 가서 초기값을 x 만큼 입력한다.

 

 A

 B

 C

 1

 0

 

 

 2

 0

 

 

 3

 0

 

 

 4

 

  
 5   




그리고 마지막 값의 위치(A3)
에 가서

=IF(A3=A1, A3+1, A3)

이라고 입력 뒤, 쭈욱 드래그 하면 된다.

 

 A

 B

 C

 1

 0

 

 

 2

 0

 

 

 3

 0

 

 

 4

 1

  
 5 1  
 6 1  
 7 2  
 8 2  
 9 2  
 10 3  


신고
Posted by code cat
프로그래밍/C2014.09.11 10:50

시간날때 마져 다 읽어볼려고 남기는데, 재밌다.  물론 나도 C에는 call-by-reference는 없다고 생각하는 사람이지만, 읽어보면 재밌다.

https://kldp.org/node/119844

신고
Posted by code cat
프로그래밍2014.09.06 14:40

sys-filesystem을 설치하는데 에러가 났다.

$> gem install sys-filesystem

Building native extensions.  This could take a while...

ERROR:  Error installing sys-filesystem:

ERROR: Failed to build gem native extension.


        /usr/bin/ruby1.9.1 extconf.rb

/usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- mkmf (LoadError)

from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'

from extconf.rb:4:in `<main>'


이건 다음과 같이 해결하면 된다.

$> sudo apt-get install ruby1.9.1-dev


이후 다시 gem install sys-filesystem을 하면 잘 된다.

신고
Posted by code cat
프로그래밍/C2014.06.05 09:17

for (i=0; i < size && iterator->next != NULL; i++, iterator=iterator->next)


for 문 조건처리에서는 위와 같이 &&나 ||를 써줘야 한다. 만약 대신에 ','를 쓴다면 


for (i=0; i < size, iterator->next != NULL; i++, iterator=iterator->next)


앞의 조건, i < size는 그냥 무시가 되어 버리니 조심하자.  하지만 처리 부분에서는 ','를 써서 처리하면 된다.

신고
Posted by code cat
프로그래밍/C2014.06.02 16:29

strerror

#include <stdio.h>

#include <string.h>


void main()

{

  FILE *fp;

  if ((fp = fopen("data.txt", "r")) == NULL) {

    fprintf(stderr, "ERROR: %s\n", strerror(errno));

    exit(1);

  }

  exit(0);

}


strerror는 errno를 받아서 실패한 원인에 대한 메세지를 리턴한다.


그런데 perror는 더 편리하다.

perror

#include <stdio.h>


void main()

{

  FILE *fp;

  if ((fp = fopen("data.txt", "r")) == NULL) {

    perror("ERROR");  // 오류가 발생했을 때 오류 출력시에 앞에 붙는 PREFIX를 인자로 받는다.

    exit(1);

  }

  exit(0);

}


신고
Posted by code cat
프로그래밍/C2014.05.29 11:22

출처: http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc

In this question, someone suggested in a comment that I should not cast the results of malloci.e:

int *sieve = malloc(sizeof(int)*length);

rather than:

int *sieve = (int *)malloc(sizeof(int)*length);

Why would this be the case?


No; you don't cast the result, since:

  • It is unnecessary, as void * is automatically and safely promoted to any other pointer type in this case.
  • It can hide an error, if you forgot to include <stdlib.h>. This can cause crashes, in the worst case.
  • It adds clutter to the code, casts are not very easy to read (especially if the pointer type is long).
  • It makes you repeat yourself, which is generally bad.

As a clarification, note that I said "you don't cast", not "you don't need to cast". In my opinion, it's a failure to include the cast, even if you got it right. There are simply no benefits to doing it, but a bunch of potential risks, and including the cast indicates that you don't know about the risks.

Also note, as commentators point out, that the above changes for straight C, not C++. I very firmly believe in C and C++ as separate languages.

To add further, your code needlessly repeats the type information (int) which can cause errors. It's better to dereference the pointer being used to store the return value, to "lock" the two together:

int *sieve = malloc(length * sizeof *sieve);

This also moves the length to the front for increased visibility, and drops the redundant parentheses with sizeof; they are only needed when the argument is a type name. Many people seem to not know (or ignore) this, which makes their code more verbose. Remember: sizeof is not a function! :)


@sirgeorge - without the prototype/decl (in stdlib.h), a C compiler might/will assume that malloc returns an int. Then the compiler generates code for the call in question as if it is getting an int. Then, say, you are compiling for a platform where pointers and ints do not have the same size, and you cast the returning int into a pointer. Bad juju. And the compiler, upon seeing the casting, won't give you a warning in this case. But if you don't cast it, then the compiler will complain abou the int-to-ptr assignment (and you will be able to detect the missing include for stdlib.h) –  luis.espinal Mar 14 '12 at 19:28 

신고

'프로그래밍 > C' 카테고리의 다른 글

for 문 multiple 조건 & 처리  (0) 2014.06.05
strerror 사용법, perror 사용법  (0) 2014.06.02
malloc 를 캐스팅 하지 말자.  (0) 2014.05.29
strtok에 NULL을 전달하는 이유  (0) 2014.05.29
함수포인터 & typdef를 이용한 함수포인터  (0) 2014.05.07
ternary operator  (0) 2014.04.13
Posted by code cat

티스토리 툴바