Programming/C++ STL2010. 9. 16. 10:07
new와 delete,
new[] 와 delete[] 가 묶여야 한다고 한다.

즉,
 int *a = new int;
 delete a;

 int *arr = new int[10];
 delete[] arr; // delete arr[]; 이 아님

그렇다고 해서 링크드 리스트 처럼 다층으로 메모리를 할당하는 구조에서는
delete[] 가 자동으로 해주진 않는것으로 보인다.
(그냥 STL 쓰면 해결된다는 지인의 조언이 -_-)

[링크 : http://yesarang.tistory.com/39]

'Programming > C++ STL' 카테고리의 다른 글

c++ template  (0) 2012.05.12
리눅스에서 c++ 컴파일시 strcpy / strcat 오류  (0) 2011.10.13
cout 그리고 namespace  (0) 2010.09.16
C++ 레퍼런스 변수(reference variable)  (4) 2010.09.15
C++0x  (0) 2010.09.15
Posted by 구차니
Programming/C++ STL2010. 9. 16. 09:35
cout을 쓰려면
#include <iostream>
using namespace std;
두개를 써야 한다고 했는데, 문득 아래를 안쓰면 어떤 에러가 날지 궁금해졌다.

 error C2065: 'cout' : 선언되지 않은 식별자입니다.
음.. 역시 namespace가 다르니 인식을 하지 못하는 건가?

물론
std::cout << "Hello World";
라고 namespace를 직접 입력해주면 에러없이 실행이 가능하다.

[링크 : http://en.wikipedia.org/wiki/Namespace]

'Programming > C++ STL' 카테고리의 다른 글

리눅스에서 c++ 컴파일시 strcpy / strcat 오류  (0) 2011.10.13
new / new[] / delete / delete[]  (4) 2010.09.16
C++ 레퍼런스 변수(reference variable)  (4) 2010.09.15
C++0x  (0) 2010.09.15
std::vector 포인터  (0) 2010.09.13
Posted by 구차니
Programming/언어론2010. 9. 16. 09:15
포인터는 메모리의 특정 지점을 찍어주는 역활을 한다.
즉, 데이터든 코드든 어디든 찍을수가 있다.

함수 포인터에서 의문점이 생긴것은 바로 함수 포인터의 선언부분이다.
#include <stdio.h>

void testout1(const char *s) {
  printf("시험출력1:%s\n", s);
}

void testout2(const char *s) {
  printf("시험출력2:%s\n", s);
}

// 함수포인터 변수
void (*funcPtr)(const char *s);

int main() {
  // 함수포인터를 testout1, testout2로 각각 대입해보고 실행해본다.
  funcPtr = testout1;
  funcPtr("테스트");
  funcPtr = testout2;
  funcPtr("테스트");
}

[링크 : http://www.redwiki.net/wiki/wiki.php/%C7%D4%BC%F6%C6%F7%C0%CE%C5%CD]

위의 코드를 보면,
 void (*funcPtr)(const char* s);
위의 부분에서 함수 포인터의 인자(arguments)들의 형은 존재하지만, 변수명은 존재하지 않는 경우가 많다.

물론 VS2010 에서 컴파일을 해보아도
변수명이 존재를 하던 변수형만 존재를 하던 상관은 없지만 왜 그럴까? 라는 궁금증이 생겼다.

왜 그럴까?
아마도, 함수 포인터에서 중요한건 연결되는 함수와,
넘겨지는 변수들의 형, 그리고 갯수이지 변수명이 아니기 때문이 아닐까?

어짜피 stdcall 형태로 calling convention을 유지한다면
넘어가는 변수명 따위는 내부적으로는 의미가 없고, 넘어가는 순서가 중요하니 말이다.
그런 이유로, 함수 포인터의 선언에는 변수형만 존재하고 변수명은 옵션으로 존재하는 것으로 생각된다.

[링크 : http://www.cplusplus.com/doc/tutorial/pointers/]

'Programming > 언어론' 카테고리의 다른 글

dangling if-else  (0) 2014.08.13
double의 정확도 자릿수  (0) 2011.03.25
type system  (0) 2010.09.15
calling convention(콜링 컨벤션)  (0) 2010.04.17
Posted by 구차니
Linux/Ubuntu2010. 9. 16. 08:51
커널 바꾸고 VFS 패닉나는 관계로.. 복구를 해야 하는데
당췌 우분투 10.04 에서 지원하는 부트로더의 메뉴로 들어가는 법을 찾지 못하고 있었는데..

grub 의 경우 esc
grub2의 경우 shift를 누르고 부팅을 하면 메뉴로 들어간다고 한다.
(USB 로 부팅해서 복구하기 귀찮아서 이러는건 절대 아닐지도 -_-)

부팅되는 동안 시스템이 쉬프트 키(SHIFT key)의 상태를 점검하는데, 만약 결정하지 못했다면, 이에스시 키(ESC key)를 누름으로써 메뉴를 보이게 할 수도 있습니다

[링크 : http://www.xpressengine.com/18965688]

[링크 : http://www.gnu.org/software/grub/]
[링크 : http://www.dedoimedo.com/computers/grub-2.html]
[링크 : http://ubuntuforums.org/showthread.php?t=1195275]


집에와서 해보니, BIOS 에서 부터 Shift를 누르는것은 들어가지지 않고,
BIOS 에서 Bootloader로 넘어가는 시점에서 부터 Shift 키를 누르고 있어야 GRUB loader menu로 진입하였다.
눌렀다 뗐다 하는것도 안되고, 계속 메뉴가 뜰때까지 누르고 있어야 하는데 음.. 이건 촘 아니라는 느낌..

'Linux > Ubuntu' 카테고리의 다른 글

grub.cfg 설정 + VFS 패닉  (4) 2010.09.18
ubuntu 업데이트 시스템의 불편함  (0) 2010.09.18
grub menu.lst 넌 어디야?!  (0) 2010.09.15
yaffs2 하려는데 왜케 빡시누  (0) 2010.09.14
ubuntu 에서 X window 종료시키기  (0) 2010.08.23
Posted by 구차니
Linux/Ubuntu2010. 9. 15. 14:01
/boot/grub/menu.lst 에서 (grub)
/boot/grub/grub.conf 로 (grub2) 변경되었다고 한다.
[링크 : http://www.ubuntu.or.kr/viewtopic.php?p=53681]

어쩐지 커널 컴파일 하고 변화가 없더라 -_-
update-grub (grub)
update-grub2 (grub2) 라는걸 사용하라는데
음.. 개인이 직접 컴파일 한 녀석은 어떻게 갱신해야 하려나...
[링크 : http://ubuntu.or.kr/viewtopic.php?p=52374]



Posted by 구차니
Programming/C++ STL2010. 9. 15. 13:06
int& a;
요 &가 바로 레퍼런스 변수이다.
어떻게 보면 포인터와 비슷하지만, 다른 녀석이고, C++ 공부중에 함수 인자에서 혼동을 느끼게 한 녀석이다.

// more than one returning value
#include <iostream>
using namespace std;

void prevnext (int x, int& prev, int& next)
{
  prev = x-1;
  next = x+1;
}

int main ()
{
  int x=100, y, z;
  prevnext (x, y, z);
  cout << "Previous=" << y << ", Next=" << z;
  return 0;
}

[링크 : http://www.cplusplus.com/doc/tutorial/functions2/]
[링크 : http://www.cplusplus.com/doc/tutorial/pointers/]

위의 소스중, prevent() 함수의 두/세번째 인자가 바로 reference 변수인데,
C에서는 당연히 포인터로 넘겨주어야 할꺼라고 생각을 했는데,
C++에서는 변수를 그냥 인자로 취해줌에도 불구하고 원본의 값이 바뀐다.
(당연히.. 레퍼런스 변수란걸 모르니 이상하게 보일수 밖에 ㅠ.ㅠ)

처음에는 자동형변환과 연관이 되어있나 했는데.. 그거랑은 거리가 좀 있는것 같고
그냥 단순히 C++ 문법적 특성으로 "참조형 변수" 라고 생각중 -_-

C++ 참조와 포인터의 차이점
- 만들어지면 값 변경불가
- 위의 이유로 null로 선언불가

C++ references differ from pointers in several essential ways:

  • It is not possible to refer directly to a reference object after it is defined; any occurrence of its name refers directly to the object it references.
  • Once a reference is created, it cannot be later made to reference another object; it cannot be reseated. This is often done with pointers.
  • References cannot be null, whereas pointers can; every reference refers to some object, although it may or may not be valid.
  • References cannot be uninitialized. Because it is impossible to reinitialize a reference, they must be initialized as soon as they are created. In particular, local and global variables must be initialized where they are defined, and references which are data members of class instances must be initialized in the initializer list of the class's constructor. For example:

[링크 : http://en.wikipedia.org/wiki/Reference_%28C%2B%2B%29]

[링크 : http://hijacker.egloos.com/1379523]
[링크 : http://www.cprogramming.com/tutorial/references.html]



'Programming > C++ STL' 카테고리의 다른 글

new / new[] / delete / delete[]  (4) 2010.09.16
cout 그리고 namespace  (0) 2010.09.16
C++0x  (0) 2010.09.15
std::vector 포인터  (0) 2010.09.13
스마트 포인터(smart pointer)  (2) 2010.09.09
Posted by 구차니
개소리 왈왈/블로그2010. 9. 15. 13:03
기념따윈 ㄱ-
(라고는 하지만 이 글은 2001번째임 ㅋㅋㅋ)
Posted by 구차니
Programming/언어론2010. 9. 15. 11:38
일반적으로 많이 접하는 '컴파일'언어들은 '형(type)'이 존재한다.
이러한 형의 존재를 type system 이라고 하고, 동적 형변환과 정적 형변환 그리고 강한 형검사, 약한 형검사로 나윈다.

음.. 결론은 없는 문제이지만,
강형(강한 형검사)/약형(약한 형검사)는 상대적인 것이라 나누는 것이 딱히 의미는 없어 보이고,
중요한건 동적 형 변환/정적 형 변환이냐의 차이가 아닐까 생각이 된다.

강한 형검사(strong typing)
 In computer science and computer programming, a type system is said to feature strong typing when it specifies one or more restrictions on how operations involving values of different data types can be intermixed. The opposite of strong typing is weak typing.

약한 형검사(weak typing)
 In computer science, weak typing (a.k.a. loose typing) is a property attributed to the type systems of some programming languages. It is the opposite of strong typing, and consequently the term weak typing has as many different meanings as strong typing does.

동적 형 변환(dynamic typing)
 A programming language is said to be dynamically typed when the majority of its type checking is performed at run-time as opposed to at compile-time. In dynamic typing, values have types but variables do not; that is, a variable can refer to a value of any type. Dynamically typed languages include Erlang, Groovy, JavaScript, Lisp, Lua, Objective-C, Perl (with respect to user-defined types but not built-in types), PHP, Prolog, Python, Ruby, Smalltalk and Tcl.

정적 형 변환(static typing)
 A programming language is said to use static typing when type checking is performed during compile-time as opposed to run-time. Statically typed languages include Ada, AS3, C, C++, C#, Eiffel, F#, Go, JADE, Java, Fortran, Haskell, ML, Objective-C, Pascal, Perl (with respect to distinguishing scalars, arrays, hashes and subroutines) and Scala. Static typing is a limited form of program verification (see type safety): accordingly, it allows many type errors to be caught early in the development cycle.

[링크 : http://kldp.org/node/55577]
[링크 : http://en.wikipedia.org/wiki/Statically_typed]
    [링크 : http://en.wikipedia.org/wiki/Statically_typed#Dynamic_typing]
    [링크 : http://en.wikipedia.org/wiki/Statically_typed#Static_typing]
[링크 : http://en.wikipedia.org/wiki/Weak_typing]
[링크 : http://en.wikipedia.org/wiki/Strong_typing]


언어별로 대충 훑어 보자면,
정적 형 변환 언어는 C 처럼 변수형을 지정하고 사용하는 언어이고
동적 형 변환 언어는 python이나 스크립트 처럼 변수형이 없이 변수명에 임의의 값을 넣고 사용하는 언어로 보인다.

'Programming > 언어론' 카테고리의 다른 글

dangling if-else  (0) 2014.08.13
double의 정확도 자릿수  (0) 2011.03.25
함수 포인터 (function pointer)  (0) 2010.09.16
calling convention(콜링 컨벤션)  (0) 2010.04.17
Posted by 구차니
Programming/C++ STL2010. 9. 15. 10:19
C99 이런것들 처럼 C++에 대한 표준안이지만 현재로서는 비공식 표준이다.
친구로는
C++98 (1998년 제정 표준)
C++03 (2003년 제정 표준)이 있다.
[링크 : http://en.wikipedia.org/wiki/C%2B%2B98#Language_standard]

[링크 : http://ko.wikipedia.org/wiki/C%2B%2B0x]
[링크 : http://en.wikipedia.org/wiki/C%2B%2B0x]

'Programming > C++ STL' 카테고리의 다른 글

cout 그리고 namespace  (0) 2010.09.16
C++ 레퍼런스 변수(reference variable)  (4) 2010.09.15
std::vector 포인터  (0) 2010.09.13
스마트 포인터(smart pointer)  (2) 2010.09.09
C++ 강좌/문법/reference  (4) 2010.09.09
Posted by 구차니
개소리 왈왈2010. 9. 15. 09:10
연이은 고양이 투척사건으로 인터넷이 시끌벅적하다.
이번 사건은
분당
고양이 주인 아저씨로 추측 (깜상애비 < 아이디)
고양이 주인은 복도에서 담배피러 나왔다가 문 닫지 않는 바람에 고양이 가출(혹은 산책)
던진사람은 이웃인 아줌마로 추측
고양이가 아줌마가 기르는 식물을 해코지 (개풀도 아니고 고양이 풀 뜯는소리 + 비싼 식물일지도?)
광포화된 아줌마 고양이 투척(잡으러 오니 놀라서 피하려고 뛰었는데 13층이었을지도?)
확인사살겸 내려와서 머리에 돈을 얹은것으로 추측(혹은 고인돌을 본 받아 돌로 묻어준 것일지도?)

리플은 애완동물은 반려동물로 가족과도 같다( = 사람과 동격 취급) 라는 입장과
애완동물 기른다고 하면서 중성화(고자라니!), 성대수술(말도 못하는 데다가 좆병신!) 시키는게 더 잔인하다
혹은 그래도 인권이 우선이지, 묘/견권이 우선이냐? 라는 입장
그에 반대하는 개만도 못한 인간도 인권취급을 해야 하냐 라는 반론
이렇게 주로 4가지로 갈린다.

문득 생명체를 죽였다는 사실보다는 '생명체'를 어떻게 정의하냐가 궁금해진다.
▶ 식물은 활동성이 매우 느리기 때문에 살아있다라는 생각이 안들어서
활동성이 높은 동물에 비해 생명존중 사상이 떨어지는 걸까?
▶  혹은, 널린게 식물이라 잡초도 그렇고 강인해서
잘못 맞으면 골로가는 유기 생명체/동물과는 다르게 대충 해도 된다는 인식인걸까?
▶ 살해과정의 분업화를 통한 생명에 대한 무게감이 가벼워진 것도 원인일까?
말은 거창하지만, 우리의 육류문화가 바로 살해의 분업화이다. 돼지나 소가 공장 라인을 타고 흐르면서
최초의 한사람 역시 기계의 힘을 빌어 숨을 끊고, 역시 기계의 힘을 빌어 다른 사람이 피를 빼내고,
라인을 타고 기계의 힘을 빌어 다른 사람에 의해 토막이 나고, 또 다른 사람에 의해 더 세분화 되어 잘리고
또 다른 사람에 의해 포장이 되고, 또 다른 사람에 의해 배송이 되고, 마트나 정육점에 올려진 후
(대개는) 엄마에 의해 요리라는 이름으로 살해과정이 마쳐지고, 식사라는 이름으로 식육을 하게 된다.
어쩌면 지극히 당연한 과정이지만, 이러한 과정들을 거치면서 우리는 어쩌면 살해에 익숙한 삶을 살게 된건 아닐까?
머.. 그렇다고 해서 지독한(!) 채식주의자는 아니지만,
똑같은 생명이거늘 하나는 "식용"이라는 이름하에 죽는게 당연하고,
다른 하나는 "애완용/반려" 라는 딱지로 죽어서는 안되고 인간과 동급 취급을 받는다는게 참 웃기기 까지 하다.

아무튼 개인적으로는
생명경시도 극에 달했으니 아줌마도 생명을 그렇게 죽인것에 대한 처벌을 받고
(일부에서는 재산손해니까 고양이 값만 물어주면 된다는 이야기도 있지만)
고양이 주인도 탈출방조에 대한 책임을 지고 + 복도에서 누가 담배피래!!!! 로 처벌을 양쪽다 했으면 하는 바램이다.

경중이야 판사가 알아서 할일이지만,
머랄까.. 요즘에는 사람이 개나 고양이 만도 못해진 느낌..
다음생에는 개로 태어날까?

[링크 : http://media.daum.net/society/affair/view.html?cateid=1010&newsid=20100914152010428&p=ned]


사족
지구 온난화를 이야기 하는(이제는 거의 사실로 드러나고 있다고 거의 대부분의 대중이 믿기에) 과학자 권력과
애완동물의 펫권(!)을 이야기 하는 애완동물 옹호론자(모피반대 세력, 실험실 쥐 반대세력 등등등)의 권력
그리고 생명은 소중한거라면서 채식만 하는 채식주의자의 권력 세가지가 싸워대면 누가 이길까?

사족 2
그럼에도 불구하고 나는 인간이기 때문에 고양이나 개 보다는 사람의 편을 들고 싶다.
Posted by 구차니