티스토리 툴바


중얼중얼2012/01/03 10:21
중학교 시절, 사회책 한켠을 보면, 이런 글귀가 있었던것 같다.

”앞으로는 정보화 시대이며, 정보를 알아보는 눈을 키워야한다.“
(실제로 이런 글귀는 아니겠지만, 이런 느낌이였던것으로 기억하련다.)

2012년이 밝아온 지금, 나는 정보화 시대에 살고 있다는 것을 통감한다.

이미 대한민국의 많은 네티즌들은 더이상 언론을 신뢰하지 않고 있다고 생각한다. (뭐 일단은 내가 안믿는 다는 소리이기도 하고.) 그렇다면 무엇을 신뢰해야하는가?

그저, 자신의 눈 뿐일까? 남을 믿지 말고 혼자 살라는 것도 아닐텐데, 뭔가 이건 아닌것 같다.

오늘은 한미 FTA에 대한 만화를 한편 본후, 관련 내용을 찾아보았다.
어라? 뭐 내용이 가지각색에, 서로 주장하는 바가 상이하다.
자, 그렇다면 협정서 원문을 읽어볼까 하는 생각까지 든다.
한글판을 읽어보자니, 뭔가 제대로하긴 했을까 라는 의심이 들고,
영문판을 읽어보자니, 능력이 안된다.

과연, 정보화 시대는 나에게 영문판을 제대로 해석할 수 있는 눈을 원하는 걸까?
그럴리가 없지.

잘하는 사람이 있을 테고, 그런 사람들을 적재적소에 배치시킨거 아니였나???


그저
내눈은 가려져있다.

이 너머에 있는것은 종교일까?

저작자 표시 비영리
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by lovian
배울만한 것/unix2011/09/23 15:31
gcc를 이용하여 컴파일을 하다보면, 자주 보게되는 경고문이다.

먼저 선언해두었던 함수의 원형과는 일치하지않는 전달인자를 넘겼을 경우에 발생한다.
물론 -Wconversion 옵션을 설정하지 않으면 발생하지 않겠지만, 꼼꼼하게 하려는 생각에 사용한다.

그런데 참 이해하기 힘든 상황이 발생했었다.

lovian$ cat a.c
int func (unsigned char aa)
{
    return 1;
}
int main ()
{
    func ((unsigned char)0);
    return 0;
}

lovian$ gcc a.c -Wconversion
a.c: In function ‘main’:
a.c:7: warning: passing argument 1 of ‘func’ with different width due to prototype
lovian$ g++ a.c -Wconversion
lovian$

보다시피 함수 원형에 맞은 형식으로 변환하여 전달하였지만, 경고문이 발생한다.
그런데! c++로 컴파일을 하니 또 경고문이 없다.

문제는 내부적인 것에 있었다.

호출규약과 관련이 없지 않다.
보통 전달인자를 실제 함수에 넘겨주기 위해서 CPU의 레지스터와, stack을 이용한다.
이 두 전달방법은 각각의 크기가 몇 바이트 이상인데,
하나의 전달인자는 하나의 레지스터, stack에 들어가므로 내부적으로는
1바이트의 전달인자라고 할지라도 레지스터 크기, stack의 크기가 전달되는 것이다.

결국 1바이트를 던져도, 내부적으로는 4바이트 이상이 사용될 것이므로 (32비트의 경우?),
일반적인 C에서는 int 형식으로 변환하는 것으로 보여진다.

C++ 컴파일러에서는 자체적으로 각각의 레지스터나 stack을 쪼개서 사용하는지도 모르겠다.
하지만, 굳이 어셈블리 코드로 보기에는 필 의미가 없어보이는 귀차니즘... :-)


하여튼, char 형식으로 전달인자를 사용하는 경우에는 귀찮은 경고를 만날 수 있다.
왠만하면 피해보자 ㅋㅋㅋ

저작자 표시 비영리
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by lovian