블로그 이미지
관리할 시간이 별로 없다는 핑계 제출중... sbin

카테고리

sbin story (32)
who is sbin (0)
sbin's equipment (2)
C language (8)
travel (0)
ubuntu (8)
Mac (3)
book & sentence (11)
헛소리.. (0)
Total49,940
Today7
Yesterday24

C언어를 배우기 시작해서 중반부에 들어 가면 변수의 접근범위에 대해 배우게 되는데요.

전역, 지역, static, extern등을 배우게 됩니다.


이중에서 이번 주제는 딱 두개 전역과 지역 입니다.


일단 두가지의 변수의 범위에 대해서는 배웠다는 전제하에 써내려 가겠습니다.


#include <stdio.h>

int a = 1;
int main(){

    printf("%d\n", a);

    {
        int a = 2;

        printf("%d\n", a);
    }
    printf("%d\n", a);

    return 0;
}

위 의 코드에서 결과물은

1

2

1

이죠. 첫번째와 세번째는 전역 변수 a에 접근한거고 두번째는 지역변수 a에 접근한 결과 입니다.


하지만 만약 2번째에서도 전역변수에 접근하고 싶다면 어떻게 해야 할까요. 일반적인 문법으로 c언어에서는 불가능한 문법 입니다. 같은 statement안에서 변수명은 오직 하나씩 존재 합니다. 변수명이 같은 두개의 변수를 접근하는 건 허용되지 않습니다.

하지만 전역과 지역이 같은 이름으로 선언된 statement안에 만들어진 statemet라면 전역과 지역중 선택해서 사용이 가능합니다.

예제 코드는 다음과 같습니다.


#include <stdio.h> int a; void f(){ printf("global = %p\n", &a); } int main(void){ int a; f(); printf("main = %p\n", &a); { int a; printf("inner1 = %p\n", &a); { extern int a; printf("inner2 = %p\n", &a); { extern int a; printf("inner3 = %p\n", &a); { int a; printf("inner4 = %p\n", &a); { extern int a; printf("inner5 = %p\n", &a); } } } } } return 0; }

위 코드의 결과는 아래와 같습니다.



main함수 안에 무려 5개의 statement가 있고 모두 a를 선언 합니다. 전부 지역 변수라면 당연히 주소값이 달라야 하지만 inner2, inner3, inner5의 주소값은 전역과 동일합니다. 


해당 statement에서는 지역 변수가 아닌 extern을 사용 하였습니다. 

이런 방법을 통해 내부 statemet에서 전역 변수의 접근이 가능합니다.


일단 방법은 이렇습니다.


하지만 애초에 큰 의미가 없는 기술입니다.

왜 전역과 지역의 변수명이 같아야 하나요? c++이나 java같은 객체 지향이라면 이해가 가지만 c언어는 순차적인 언어 입니다. 객체를 만들어 객체에 접근하는 개념의 언어가 아니라 main의 시작 부터 끝까지 한줄 한줄 읽어 내려가는 언어 입니다.

변수명이 같다는 것은 코딩하는 사람에게만 의미 있는 것이죠. 아무리 개념적으로 전역과 지역의 역할이 같다고 해도 같은 이름을 쓰는건 코드를 해석하기 어렵게 만들 뿐이라고 생각합니다.

즉, 결론은 애초에 전역과 지역의 변수명을 다르게 쓰시는 걸 추천합니다.


이상 갑자기 끗.



저작자 표시 비영리 동일 조건 변경 허락
신고
Posted by sbin

마운틴 라이언 설치 후 배포자의 인증이 되지 않아 설치 되지 않는 패키지가 생겼습니다.

cscope도 그중 하나로 이전 버전에서는 이곳 에서 15.7버전의 패키지를 받아 설치 했는데요.


그런데 mountain lion 부터 위에 설명한 이유로 설치가 되지 않습니다.

그래서 어쩔수 없이 cscope의 소스코드를 받아서 빌드 해 주는 것으로 했습니다.

그 과정은 다음과 같습니다.


1. cscope 다운 로드 => cscope 홈페이지

2. 원하는 위치에 압축 풀기 (다운받은 위치든 임의의 위치 이든 상관 없음)

3. terminal을 키고 해당 위치로 이동

4. 터미널 명령어 : ./configure

5. 터미널 명령어 : cd  src/


----------아래로는 자신이 사용하기 편한 에디터로 대체 하세요.

6. 터미널 명령어 : vi constants.h

7. vi 명령어 : /TERMINFO



8. 위는 7을 통한 검색 결과 입니다. 여기서 TERMINFO 의 설정이 1이 되게 해야 합니다. 아래 두 방식중 하나를 선택해서 변경해 주세요.




9. 파일을 저장 한후

----------------에디터 종료-------------

10. 터미널 명령어 : cd ..

11. 터미널 명령어 : make

12. 터미널 명령어 : sudo make install


이상으로 mac에서의 cscope 설치법을 마치겠습니다.

감사합니다.

저작자 표시 비영리 동일 조건 변경 허락
신고
Posted by sbin

http://www.mathworks.co.kr/support/solutions/en/data/1-F37IJB/index.html

위는 Matlab 홈피에서의 응답이네요.


간단 합니다. 설정파일 하나만 건드려 주면 해당 문제를 해결 할 수 있네요.

에디터로 변경해 주라는데...저에게 적당한 에디터는 VI 입니다.

따라서 다음으로 변경하겠습니다.


1. 터미널(Iterm2 추천)에서 명령어 :

    vi /Applications/MATLAB_R2008a/bin/.matlab7rc.sh

    환경 : MAC mountain lion, matlab r2008a

2. 명령어 : /DYLD_LIBRARY_PATH


결과는 다음과 같습니다.


해당 문자열을 찾아 주죠.

3. n(다음 문자열 찾기 명령) 을 몇번 눌러 아래와 같은 부분을 찾습니다.

4. 여기서 else 부분이 기제되지 않아 있는데요. 아래 그림과 같이로 변경해 주세요.

   ( =부분으로 커서 이동후  a를 누르시면 바로 다음에 커서가 깝빡이며 편집 모드로 변경 될 것입니다.)

    DYLD_LIBRARY_PATH=/System/Library/Frameworks/JavaVM.framework/Libraries


5. esc 키 이후 :wq 입력

6. 이제 matlab에서 figure를 켜도 다운되지 않을 것입니다.


감사합니다.

저작자 표시 비영리 동일 조건 변경 허락
신고
Posted by sbin

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

티스토리 툴바