effective c++의 item1을 읽고...궁금한점..
오늘 부터 effective c++를 혼자서 독학하고 있는 사람입니다.
아직 내공이 많이 부족해서인지 잘 이해가 가지 않는 점이
많이 있습니다...책도 원서이고 보니...영어도 짧아서...
많은 어려움이 있습니다....
먼저 제가 궁금한점은 다음과 같습니다.
1. Item 1에 보면 preprocessor보다는 compiler를 더 선호하라는데요...그 이유인즉 예를 들어 #define PI 3.14159 를 선언했을때 이것은 symbol table에 포함이 안되기 때문이라고 합니다..
이 symbol table이 정확이 무엇을 말하는지 궁금합니다...
그리고 계속 읽어보면 symbolic debugger이라는 용어도 나오는데요....이것도 정확이 무엇인지 의미가 잘 와닫지 않네요..
2. header file에 존재하는 constant definition을 가리키는 pointer변수를 생성할때 const형을 두번쓰라는것이 잘 이해가 안됩니다. 물론 값을 변경시키지 않을 목적으로 const를 한번쓰는 것은 이해가 가지만, 후에 그 포인터 변수를 다른 constant definition의 값을 가지도록 할수도 있는거 아님니까?
다음은 책에 나온 선언 형태입니다.
const char * const authorName= "Scott Meyers";
이상 두가지 질문인데요....맨날 질문만 올려서 죄송하네요..
답변도 몇개 달아보았지만 별로 도움은 안되었을듯...^^
그럼 수고하세요~~~
2번은 아예 바뀌지 않을거라는걸로즉 define과 같은 용도로 쓰
2번은 아예 바뀌지 않을거라는걸로
즉 define과 같은 용도로 쓰라는 얘기 아닌가요?
2번은 아예 바뀌지 않을거라는걸로즉 define과 같은 용도로 쓰
2번은 아예 바뀌지 않을거라는걸로
즉 define과 같은 용도로 쓰라는 얘기 아닌가요?
1. Preprocessor 보다 변수로 하라는 것은 debugging을
1. Preprocessor 보다 변수로 하라는 것은 debugging을 직접 해보면 이유를 압니다. 예를 들어 위처럼 define문을 사용하는 경우 PI를 debugger에서는 값을 볼 수 없습니다. 위와 실제적으로 동일하지만
const float PI=3.14159;
처럼 하여 사용을 하면 debugger에서 PI의 값을 볼 수 있습니다.
symbol table이라는 것은 변수,함수들의 이름을 모아놓은 table이라고 보면 되죠. 상수 값은 여기에 저장하지 않습니다.
직접 아무 디버거나 사용하다 보면 왜 그런지 아실 거에요.
2. 두 const가 다르죠. 앞의 const는 "Scott Meyers"가 const라는 거고, 뒤위 것은 const int i = 10 처럼 포인터가 const라는 것을 말하죠.
일반적인 경우에는 const를 쓰나 안쓰나 큰 차이는 없지만, 값을 잘 못 수정하는 경우 컴파일 에러가 발생하므로 좀 더 안전하다고 할 수 있죠. emedded환경에서는 롬에서 실행되는 경우 불필요한 메모리를 줄일 수 도 있고요.
[quote]1. Item 1에 보면 preprocessor보다는 c
source file을 object file로 만들때, 실제 변수의 위치를 알기 위해, 또는 외부 변수의 주소를 알기 위해 (name, address) 형태의 테이블이 들어갑니다. 이 것을 symbol table이라고 합니다.
Preprocessor는 컴파일하기 전에 거치는 것이므로, 실제 compiler 입장에서는 PI를 볼 수 없죠. PI가 처리된 3.14... 를 보기 때문에 symbol table에 포함되지 않습니다.
Debugging할 때, symbol을 보여주는 debugger를 symbolic debugger라고 합니다. 일반적으로 보통 쓰는 debugger가 다 symbolic debugger입니다. Symbolic debugger나 source-level debugger나 다 비슷한 것이고, 반대로는 low-level debugger, machine-language debugger라고, DOS나 Windows에 포함되어 있는 debug.com (또는 debug.exe)가 여기에 해당하는 데, 이 구분은 별로 중요하지 않습니다. 그냥 debugger다고 생각하시는게 편합니다.
그것은 preprocessor의 기능을 대체하기 위해서 그렇게 쓴 것입니다. 물론 preprocessor macro도 #undef한 다음 다시 정의할 수 있지만..
const의 위치에 따라, 몇가지로 나눌 수 있는데,
여기를 참고하기 바랍니다.
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
아 답변 주신 모든분들 감사드립니다.즐거운 하루 되세요~~ :D
아 답변 주신 모든분들 감사드립니다.
즐거운 하루 되세요~~ :D
댓글 달기