'프로그래밍 언어/C/C++'에 해당되는 글 30건

  1. 2011.04.06 calloc vs malloc (7)
  2. 2010.10.25 [C언어] a - b < 0 vs. a < b
  3. 2010.09.30 C로 수행시간 체크하기
  4. 2010.09.10 __builtin_expect 키워드
  5. 2010.07.21 gcc 업그레이드 (4.5.0)
  6. 2010.02.21 Header안에 static 변수
  7. 2010.02.18 디버깅하는 법 - 툴 - ltrace
  8. 2010.01.27 unresolved symbol 에 관하여
  9. 2009.09.02 [Python]파일명 바꾸기
  10. 2009.08.31 AspectC++


둘 모두 메모리를 할당해준다는 점에서는 동일합니다.

하지만, 특정 상황에서는 어떤 것을 써야 할지 혼돈이 생기는 경우가 많습니다.
물론 대부분 calloc보다는 malloc을 쓰게 되는데 왜 이런 두 종류의 api가 존재하는 것일까 궁금하게 되었습니다.

또, calloc은 두개의 인자를 받도록 되어 있습니다.
왜 똑같이 메모리를 할당받는 데 calloc은 두개의 인자를 malloc은 한개의 인자를 받는 것일까요?
 

추: 답변글들을 꼭 읽어보세요. 이 글은 잘못된 정보를 포함할 수 있습니다.

malloc()

void *malloc(size_t size);

malloc은 size만큼의 메모리를 할당하고 (초기화 없이) 해당 힙 영역을 반환합니다.

int *ptr = malloc(10 * sizeof (int));


calloc()

void *calloc(size_t nelements, size_t bytes);

calloc는 num * size만큼의 메모리를 할당하고 해당 힙 영역을 0으로 초기화하여 반환합니다.

int *ptr = calloc(10,sizeof (int));


물론 둘의 기능상 동일한 비교를 하려면 calloc vs malloc+memset 이라고 해야 맞을 것입니다.
malloc는 0으로 초기화를 수행하지 않으므로 굳이 calloc처럼 초기화를 원한다면 memset도 호출해야 할 것입니다. 


 1. calloc은 왜 두개의 인자를 받는 것일까?
calloc을 왜 설계했는지는 잘 모르겠지만 짧은 검색 실력을 바탕으로 보면 calloc은 두개의 인자를 받음으로써 overflow 여부를 확인할 수 있게 되었습니다. 모든 calloc의 구현에서 이 사실이 유효한지는 알 수 없지만, malloc에서 많이 사용하는 곱셈은 분명 size_t를 넘어서는 메모리 할당이 발생할 경우 잘못된 메모리를 할당받응ㄹ 수 밖에 없지만, calloc은 NULL을 return할 수 있습니다.
http://stackoverflow.com/questions/4083916/two-arguments-to-calloc

2. calloc 과 malloc+memset(..0..) 중 어떤 것이 빠를까?
이 부분에 대해서는 플랫폼마다 논쟁의 여지가 있을 듯 합니다만 일단 calloc이 더 빠를 가능성이 많아 보입니다. 어떤 플랫폼에서는 이미 운영체제가 0으로 초기화한 메모리 영역을 가지고 있을 수 있기 때문에 calloc시 그 영역을 바로 반환하는 것으로 처리될 수 있다고 합니다. 이런 경우 모든 메모리 영역을 0으로 초기화해야 하는 memset보다 단연 빠를 수 있습니다.
하지만, calloc과 malloc만을 비교한다면 malloc이 빠를 확률이 매우 높습니다. OS는 사용자가 malloc을 통해 메모리를 요청했다고 해서 반드시 실제 메모리를 잡아서 전달하는 것이 아닐 수 있습니다.(이 부분은 OOM과 관련하여 추가 정리가 필요할 듯 합니다.) 반면 calloc은 메모리를 잡고 초기화할 우려가 있습니다.
http://stackoverflow.com/questions/2688466/why-mallocmemset-slower-than-calloc
http://stackoverflow.com/questions/3449031/c-calloc-v-malloc

3. 어떤걸 쓰는게 좋을까?
대부분의 경우에는 malloc을 쓰는 것이 좋다고 합니다.
특히 주의해야 할 부분은 calloc이 하는 0으로 초기화란, 단순히 비트 클리어의 역활일 뿐이라는 점입니다.
float 배열을 calloc으로 할당한다고 해서 0.0이 되는 것이 아니라는 점입니다.
또, 메모리를 할당받는 이유가 무언가 쓰기 위함일텐데 대부분의 경우 다시 값을 덮어씌울 것이라면 초기화할 필요가 없습니다.
http://wiki.answers.com/Q/Is_it_better_to_use_malloc_or_calloc_to_allocate_memory

기타
http://stackoverflow.com/questions/1538420/c-difference-between-malloc-and-calloc

 


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

GCC옵션: finstrument-functions  (0) 2011.05.24
linker 관련 링크  (0) 2011.04.15
calloc vs malloc  (7) 2011.04.06
[C언어] a - b < 0 vs. a < b  (0) 2010.10.25
C로 수행시간 체크하기  (0) 2010.09.30
__builtin_expect 키워드  (0) 2010.09.10
Posted by 소혼

댓글을 달아 주세요

  1. ^^ 2011.08.19 10:19 Address Modify/Delete Reply

    잘읽었습니다 :)

  2. 2011.09.18 14:16 Address Modify/Delete Reply

    비밀댓글입니다

    • 소혼 2011.09.22 21:23 신고 Address Modify/Delete

      답변 감사합니다.

      어디까지나 검색한 글을 발번역한거라 틀린 내용이 있을 수 있습니다.

      적어주신 말중에 calloc이 memset과 같은 역할을 해야 하기 때문이라고 하는 건 이해가 안가는데, 혹시 출처가 있는지 궁금합니다.

      malloc+memset과 calloc의 성능은 한번 측정해보겠습니다.
      일반적인 경우라면 둘의 성능은 비슷하거나, calloc이 빨라야(글에서 언급한것처럼 아주 특별한 경우) 정상일 것 같네요.

      역시나 이런 부분들이 궁금해서 검색한 글들을 정리해본 것입니다.

      덕분에 더 공부가 된 것 같습니다. 감사합니다.

  3. vbdream 2013.01.01 02:44 Address Modify/Delete Reply

    "float 배열을 calloc으로 할당한다고 해서 0.0이 되는 것이 아니라는 점입니다."는 잘못된 이야기입니다.

    IEEE 754 부동소수점 표기 방식에, float이든 double이든 모든 비트가 0인 경우는 0으로 정의되어있기 때문입니다.
    부동소수점에서 부호 비트가 가장 최상단에 있는 것, 그리고 모든 비트가 0일 때는 0인 것은 정수와의 호환을 염두해 둔 설계입니다.

    • vbdream 2013.01.01 02:50 Address Modify/Delete

      그리고 calloc이 설계된 원래 목적은 calloc이 무엇의 약어인지 알면 해결됩니다. calloc은 Contiguous Memory Allocation의 약어로, '연속 메모리 할당' 정도로 번역될 수 있습니다. 여기에서 말하는 연속 메모리(contiguous memory)는 배열을 의미합니다.

      malloc의 원래 목적은 구조체 따위를 위한 메모리 할당, calloc의 원래 목적은 배열을 위한 메모리 할당입니다.

    • 소혼 2013.01.04 21:25 신고 Address Modify/Delete

      답변 감사합니다.

      관련 내용을 좀 더 찾아봐야겠네요.

  4. Ww 2018.05.19 12:33 Address Modify/Delete Reply

    좋은 글 감사합니다.
    플랫폼마다 다른것인지는 모르겠지만 애플홈페이지에는 정반대로 적혀있어서 혼란스럽네요.
    https://developer.apple.com/library/content/documentation/Performance/Conceptual/ManagingMemory/Articles/MemoryAlloc.html
    calloc은 변수를 사용하기 시작할때 할당이 된다고 쓰여있네요.
    이건 malloc도 미찬가지일려나요...?
    calloc은 malloc+memset과 다르다는 의도인것 같습니다.
    memset을 최대한 skip하도록 되어있는것같네요.

너무 간단한 건데, 이런걸 한번에 캐치하지 못했다.

수학시간에 배운데로 a -b < 0 은 a < b와 다를 바 없다.

하지만 프로그래밍 언어에서는?

꼭 그렇지는 않다.


위 간단한 코드를 출력해보면 무엇이 나올까?
출력 결과는
a < b
[end]

가 된다.
어찌 보면 당연한건데 막상 프로젝트에서 접하면 쉽게 발견하기 어려운 버그가 된다.
unsigned 인 a 와 b의 차를 계산하여 나온 결과가 음이 되므로 오버플로우에 의해서 a - b는 양이 된다.

이런 코딩을 하진 않겠지만 눈에도 익혀서 디버깅을 할 때 쉽게 찾을 수 있도록 노력해야겠다.



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

linker 관련 링크  (0) 2011.04.15
calloc vs malloc  (7) 2011.04.06
[C언어] a - b < 0 vs. a < b  (0) 2010.10.25
C로 수행시간 체크하기  (0) 2010.09.30
__builtin_expect 키워드  (0) 2010.09.10
gcc 업그레이드 (4.5.0)  (0) 2010.07.21
Posted by 소혼
TAG C, 예제

댓글을 달아 주세요

간단하게 수행시간 체크하는 매크로를 만들어보았다.

### c++
#ifdef _WIN32
#define ENTER { \
    LARGE_INTEGER begin, end, freq; \
    QueryPerformanceFrequency(&freq); \
    QueryPerformanceCounter(&begin);
#define LEAVE \
    QueryPerformanceCounter(&end); \
    double elapsed_time = (double)(end.QuadPart - begin.QuadPart) / freq.QuadPart; \
    printf("%s:%d] %3.2f elapsed\n", __FUNCTION__, __LINE__, elapsed_time); \
#else
#include <sys/time.h>
#define ENTER { \
    struct timeval stime, etime; \
    unsigned int performed_time; \
    gettimeofday(&stime, NULL);
#define LEAVE \
    gettimeofday(&etime, NULL); \
    performed_time = etime.tv_sec - stime.tv_sec; \
    performed_time = performed_time * 1000000 + etime.tv_usec - stime.tv_usec; \
    printf("%s:%d] %d elapsed\n", __func__, __LINE__, performed_time); \
    }
#endif




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

calloc vs malloc  (7) 2011.04.06
[C언어] a - b < 0 vs. a < b  (0) 2010.10.25
C로 수행시간 체크하기  (0) 2010.09.30
__builtin_expect 키워드  (0) 2010.09.10
gcc 업그레이드 (4.5.0)  (0) 2010.07.21
Header안에 static 변수  (0) 2010.02.21
Posted by 소혼

댓글을 달아 주세요

최근 이상한 매크로를 발견하고 추적하던 중 멋진 gcc의 키워드를 발견했다.

__builtin_expect라는 키워드이다.
아래 URL에 좀 더 자세히 적혀있다.
http://galaxyra.linuxstudy.pe.kr/galaxyra/tag/__builtin_expect


한마디로 말하면 실행할 가능성이 높은 애를 위해서 컴파일하도록 하는 매크로이다.

방어적 코딩을 하다보면 무수히 많은 if 문을 넣어야 하는데 아키텍처를 조금이라도 공부한 사람들은 Pipeline Hazard때문에 if문을 꺼리게 된다.
if문의 해악을 없앨순 없지만 되도록 실행가능성이 높은 코드를 밑에 배치해 파이프라인 해저드를 최소화 시킬수 있도록 해주는 키워드가 바로 이 키워드이다.

#define unlikely(x)     __builtin_expect(!!(x), 0)

위처럼 unlikely 키워드를 사용하면 좀 편하다. (위 URL에서 발췌)
if (__builtin_expect(조건문, 0))
과 같이 쓴다.
0이라고 적으면 if문이 false일거라고 가정하고 코드를 배치한다.

이것의 성능을 측정한 자료.
http://blog.man7.org/2012/10/how-much-do-builtinexpect-likely-and.html


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

[C언어] a - b < 0 vs. a < b  (0) 2010.10.25
C로 수행시간 체크하기  (0) 2010.09.30
__builtin_expect 키워드  (0) 2010.09.10
gcc 업그레이드 (4.5.0)  (0) 2010.07.21
Header안에 static 변수  (0) 2010.02.21
디버깅하는 법 - 툴 - ltrace  (0) 2010.02.18
Posted by 소혼

댓글을 달아 주세요

WebKit 작업중에 오류가 발생해서 알아보니
gcc 4.4.1에 버그가 있는 것 같다.

현재까지 우분투 9.10 의 기본 gcc 버전은 4.4.1이다.
그래서 직접 gcc 4.5를 설치해보기로 했다.

gcc 4.5 릴리즈 노트 : http://gcc.gnu.org/gcc-4.5/
gcc SVN 관련 문서 : http://gcc.gnu.org/svn.html

1. gcc 4.5 다운로드
먼저 gcc 4.5를 뜻하는 브랜치를 확인해야하겠기에 아래 명령을 수행한다.
svn ls svn://gcc.gnu.org/svn/gcc/branches

명령의 결과로 무수히 많은 브랜치가 올라가는데 gcc 4.5 브랜치는
gcc-4_5-branch

SVN으로 받았으나 configure에서 에러가 발생했는데 메시지 공부하고 있기도 그렇고 해서 그냥 릴리즈 를 받기로 했다.(이제와서 생각해보니 별 차이는 없었을 것 같다.)
경로 : ftp://ftp.dti.ad.jp/pub/lang/gcc/releases/gcc-4.5.0/
파일 : ftp://ftp.dti.ad.jp/pub/lang/gcc/releases/gcc-4.5.0/gcc-4.5.0.tar.gz

2전에 gawk가 있어야 한다.
apt-get install gawk

2. GMP 설치
gcc를 그냥 configure를 수행하면 아래와 같은 에러 메시지를 보게 된다.
 checking for the correct version of mpfr.h... no
configure: error: Building GCC requires GMP 4.2+, MPFR 2.3.1+ and MPC 0.8.0+.
Try the --with-gmp, --with-mpfr and/or --with-mpc options to specify
their locations.  Source code for these libraries can be found at
their respective hosting sites as well as at
ftp://gcc.gnu.org/pub/gcc/infrastructure/.  See also
http://gcc.gnu.org/install/prerequisites.html for additional info.  If
you obtained GMP, MPFR and/or MPC from a vendor distribution package,
make sure that you have installed both the libraries and the header
files.  They may be located in separate packages.
인터넷을 검색하면 GMP와 MPFR의 설치법이 나온다.

GMP 를 다운로드한다.
경로 : http://ftp.gnu.org/pub/gnu/gmp/
내가 받은 파일 : http://ftp.gnu.org/pub/gnu/gmp/gmp-5.0.1.tar.gz

압축을 해제하고 설치한다.
해당 폴더로 이동후
./configure --enable-cxx ( 이후 ppl 라이브러리가 이 인자를 요구했음 )
make install
하면 /usr/local 밑에 설치된다.

3. MPFR 설치
설명 : The MPFR library is a C library for multiple-precision floating-point computations with correct rounding.

MPFR을 다운로드한다.
경로 : http://www.mpfr.org/mpfr-current/
내가 받은 파일 : http://mpfr.loria.fr/mpfr-current/mpfr-3.0.0.tar.gz

압축을 해제하고 설치한다.
해당 폴더로 이동후
./configure
make install
하면 /usr/local 밑에 설치된다.(위에 적은 말 Ctrl+C / Ctrl +V)

4. MPC 설치
MPC를 설치한다.
경로 : http://www.multiprecision.org/
내가 받은 파일 : http://www.multiprecision.org/mpc/download/mpc-0.8.2.tar.gz

압축을 해제하고 설치한다.
해당 폴더로 이동후
./configure
make install
하면 /usr/local 밑에 설치된다.(위에 적은 말 Ctrl+C / Ctrl +V)

**. PPL 빌드(시도했으나 실패. 그리고 설치에 영향을 주지 않았음)
./configure --with-libgmp-prefix=/usr/local --with-libgmpxx-prefix=/usr/loca

5. gcc 빌드
./configure
make (쫄아서 make install 안하고 일단 make)
make install

6. 테스트
export PATH=/usr/local/bin:$PATH
gcc --version
아래와 같은 결과가 나오는 것을 확인할 수 있었다.

gcc (GCC) 4.5.0
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

허접한 글이지만, 도움이 되신다면 아래 손가락 꾹 눌러주세요.

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

C로 수행시간 체크하기  (0) 2010.09.30
__builtin_expect 키워드  (0) 2010.09.10
gcc 업그레이드 (4.5.0)  (0) 2010.07.21
Header안에 static 변수  (0) 2010.02.21
디버깅하는 법 - 툴 - ltrace  (0) 2010.02.18
unresolved symbol 에 관하여  (0) 2010.01.27
Posted by 소혼

댓글을 달아 주세요

C++에서 static을 다소 헷갈리게 만드는 요소가 있긴 하지만,

header에서 static 변수를 선언해서는 안된다.

static : 지역 변수임을 알려주는 키워드 (C++ 클래스 내부의 static과 다른 의미이다.)

헤더에서 static을 선언하면 어떤 일이 일어날까?
간단한 예제를 만들어보았다. (컴파일 없이 손코딩했음)


common.h
static int gvalue = 10;


main.c
#include <stdio.h>
#include "common.h"
#include "b.h"

int main () {
    printf("%d\n", gvalue);
    call_b();
    printf("%d\n", gvalue);
    return 0;
}

b.h
void call_b();

b.c
#include "common.h"

void call_b() {
    gvalue++;
}

간단한 예제인데, 이 때 출력되는 값은 얼마일까?
10과 11이 출력되길 기대하겠지만 안타깝게도 10과 10이 출력이 된다.
이유는 gvalue가 main.c와 b.c에 각각 따로 존재하기 때문이다.
nm으로 바이너리를 까보면 gvalue를 위해 두개의 심볼이 존재하는 것을 알 수 있다.
즉, b.c가 증가시킨 gvalue는 main.c에 보이지 않는 b.c를 위한 지역변수가 된다.

그럼 이런 실수를 왜 할까?
C++로 넘어오면서 일부 책에서 #define을 쓰지 말고 const를 쓸것을 권장하고 있다. 이러한 상수형(?) 변수를 쓰는 것이 debugging에 도움이 될 수 있고 그다지 성능을 많이 잡아먹지 않을 것이라는 것은 안다.(제대로 짰을때에 한해서)
이렇게 만들어진 const를 그냥 header에 넣으면 분명 에러가 발생한다. 이유는 헤더가 동일한 상수형 변수를 여기저기 만들기 때문이다.운
거기서 포기하지 않고 static을 붙이면 컴파일은 되겠지만, 나중에는 찾기 어려운 재앙이 될 수 있다.

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

__builtin_expect 키워드  (0) 2010.09.10
gcc 업그레이드 (4.5.0)  (0) 2010.07.21
Header안에 static 변수  (0) 2010.02.21
디버깅하는 법 - 툴 - ltrace  (0) 2010.02.18
unresolved symbol 에 관하여  (0) 2010.01.27
[Python]파일명 바꾸기  (0) 2009.09.02
Posted by 소혼
TAG C, C++

댓글을 달아 주세요

디버깅이란 말 그대로 버그를 잡는다는 뜻이다.

코딩을 잘하는 사람이 대체로 디버깅도 잘하는 법이지만, 아무래도 디버깅을 유별나게 잘하는 사람들이 있다.
또, 디버깅 실력은 사람의 실력도 중요하지만 그가 사용하는 툴의 능력도 결코 무시할 수 없는 것 같다.

Visual C++이나, Eclipse같은 툴을 쓸 수 있다면야 참 좋겠지만,
아무래도 임베디드 환경에서 이런 호사는 기대하기 힘들고
심지어 gdb마저도 쓰기 힘든 경우가 많다.

이럴 때 strace, ltrace를 사용해보는 것도 좋을 듯 싶다.
지금까지 gdb없으면 디버깅 못한다고 짧은 생각을 해왔는데 ltrace를 보니 때론gdb보다 뛰어나다는 생각마저 든다.

ltrace 는 라이브러리상에 호출되는 symbol들의 이름을 출력해준다.
콜 스택을 보여주진 못하지만, API들이 순차적으로 호출되는 흐름을 보여주기 때문에
만약 비정상적인 동작을 할 때,
또는 이상하게 시간이 많이 걸릴 때
문제를 추적하는데 도움을 줄 수 있다.

물론 함수콜만을 보여주기 때문에 특정 함수 내부에서 일어나는 코드들을 보장못하지만 코드의 흐름을 분석하고 이해하는데 큰 도움이 된다.

또, 해당 함수를 수행하는데 걸린 시간을 출력할 수 있어서, 전체적인 수행시간에 어떤 부분이 많은 시간을 잡아먹는지 분석도 가능하다.

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

gcc 업그레이드 (4.5.0)  (0) 2010.07.21
Header안에 static 변수  (0) 2010.02.21
디버깅하는 법 - 툴 - ltrace  (0) 2010.02.18
unresolved symbol 에 관하여  (0) 2010.01.27
[Python]파일명 바꾸기  (0) 2009.09.02
AspectC++  (0) 2009.08.31
Posted by 소혼

댓글을 달아 주세요

컴파일(정확히는 링크)을 할 때 아래와 같은 에러를 종종 보곤 한다.
unresolved symbol이라는 에러는 말 그대로 해당 심볼명을 찾을 수 없다는 에러이다.

이런 에러가 났을 때, 우리가 해야 할 일은

[ 내가 만든 함수인 경우 ]
   1. unresolved symbol이 뜬 곳에서 함수명, 인자의 타입, 개수, 반환값등을 확인한다.
   2. 해당 함수를 포함한 파일이 컴파일 되는지 확인한다.
      매크로등에 의해 컴파일에 포함되지 않을 수도 있기 때문이다.
      쉽게 확인하는 방법의 하나는 해당 함수에 #error를 넣고 컴파일해보는 것이다.
      컴파일 에러가 아니라, unresolved symbol이 또 뜬다면, 그 함수는 컴파일에 포함되지 않은것이다.
  3. C함수인지 C++함수인지 확인한다.
      C++로 컴파일 할 때, C함수(C로 컴파일되는 파일에 있는 함수)를 처리하려면 헤더파일에는 extern "C" { }안에 함수가 선언되어 있어야 한다.
      만약 헤더파일에서 이러한 처리가 제대로 안되어 있다면 C++은 해당 함수의 이름을 C++형태로 추적하려 한다.

[ 남이 만든 함수인 경우(라이브러리에서 참조하는 경우) ]
   4. 3번과 같이 헤더파일에 제대로 선언되어 있는지 확인한다.
   5. 라이브러리 파일안에 해당 함수가 있는지 파일 내부를 검색한다.(grep같은 것을 이용하여)
   6. 컴파일 할 때, 해당 라이브러리가 포함되는지 확인한다.
       리눅스의 경우 -L의 라이브러리의 경로가 맞게 포함되어 있는지, -l로 해당 라이브러리가 첨부되어 있는지 확인해야 한다.

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

gcc 업그레이드 (4.5.0)  (0) 2010.07.21
Header안에 static 변수  (0) 2010.02.21
디버깅하는 법 - 툴 - ltrace  (0) 2010.02.18
unresolved symbol 에 관하여  (0) 2010.01.27
[Python]파일명 바꾸기  (0) 2009.09.02
AspectC++  (0) 2009.08.31
Posted by 소혼

댓글을 달아 주세요


예섬이를 위해 간단히 짜본 파이썬 스크립트.
문제는 엠파스에서 탭이 제대로 안붙는구나 ;;
[요구사항]
특정 폴더를 선택하여, 해당 폴더가 가지고 있는 파일들의 이름 앞에 특정 문자열을 붙일 수 있어야 한다.
import os, time, string
from Tkinter import *
from tkFileDialog import askdirectory

top = Tk()
F = Frame(top)
F.pack(expand="true")

myPath = askdirectory(title="select directory", mustexist=1)
if not myPath:
	os.exit
else:
	print "selected", myPath

#myPath = raw_input("Enter the path you want to change filename : ");
suffix = raw_input("Input suffix you want : ");
for f in os.listdir(myPath):
	tempPath = os.path.join(myPath, f)
	tempPath2 = os.path.join(myPath, suffix + f)
	if not os.path.isdir(tempPath):
		os.rename(tempPath, tempPath2)

raw_input("finished")

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

gcc 업그레이드 (4.5.0)  (0) 2010.07.21
Header안에 static 변수  (0) 2010.02.21
디버깅하는 법 - 툴 - ltrace  (0) 2010.02.18
unresolved symbol 에 관하여  (0) 2010.01.27
[Python]파일명 바꾸기  (0) 2009.09.02
AspectC++  (0) 2009.08.31
Posted by 소혼
TAG Python

댓글을 달아 주세요


http://ddkkfj.tistory.com/trackback/3
http://heestory.kr/trackback/320
http://www.zdnet.co.kr/ArticleView.asp?artice_id=00000039147106
http://www.aspectc.org/

오랜만에 서핑을 하니 읽어야 할게 많네..

옛날 AspectJ 보고 부러워 했는데 C++도 역시 있었군

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

gcc 업그레이드 (4.5.0)  (0) 2010.07.21
Header안에 static 변수  (0) 2010.02.21
디버깅하는 법 - 툴 - ltrace  (0) 2010.02.18
unresolved symbol 에 관하여  (0) 2010.01.27
[Python]파일명 바꾸기  (0) 2009.09.02
AspectC++  (0) 2009.08.31
Posted by 소혼
TAG AspectC++

댓글을 달아 주세요