안녕하세요.
struct aa bb = { .cc = dd, #if 1 // blabla~ .ee = ff, .gg = hh, #endif };
이런 C 코드가 있습니다.
중간에 전처리기 + 주석이 있는데요.
저렇게 사용하면 안돼는건지요? 프로그램 동작이 이상합니다..
안됀다면 내부적으로 어떻게 전처리된건지도 궁금합니다.
도와주세요~
중간에 전처리기를 사용해도 되긴 하는데 저건 약간 이상하군요 -_+;; #if 1이면 무조건 실행되는건데 보통 #ifdef MY_DEBUG이런식으로 쓰거든요 전처리기안에 있는걸 빼고 싶다면 #if 1을 #if 0으로 바꾸시면 될거 같은데요
주석 유무는 상관없을것 같은데요.
주석을 빼면 정상적으로 동작하나요?
주석 문제가 아닌가봅니다. 죄송;
#define ee(a, b) \ do { \ // blabla \ } while (0)
이런 define이 있는데 error없이 컴파일돼나봅니다. 신기하네요..
ㅎㅁㅎ
매크로 body가 여러 줄에 걸쳐 있는 경우 자주 사용되는 기법입니다. 버그 방지를 위한 기법으로 권장되기도 합니다. 특히 매크로 안에 변수 선언이 필요하다면, 필수에 가깝죠.
아래와 같이 해도 되는건가요? .gg = hh,
보통 .gg = hh
로 해야 하는가 아닌가 싶어서요..;
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
-_+;; 사용해도 됩니다.
중간에 전처리기를 사용해도 되긴 하는데
저건 약간 이상하군요 -_+;;
#if 1이면 무조건 실행되는건데
보통 #ifdef MY_DEBUG이런식으로 쓰거든요
전처리기안에 있는걸 빼고 싶다면 #if 1을 #if 0으로
바꾸시면 될거 같은데요
동작이 어떻게 이상하시다는건지?
주석 유무는 상관없을것 같은데요.
주석을 빼면 정상적으로 동작하나요?
주석 문제가
주석 문제가 아닌가봅니다. 죄송;
이런 define이 있는데 error없이 컴파일돼나봅니다. 신기하네요..
ㅎㅁㅎ
ㅎㅁㅎ
do while 블록 매크로는 꽤 유용합니다.
매크로 body가 여러 줄에 걸쳐 있는 경우 자주 사용되는 기법입니다.
버그 방지를 위한 기법으로 권장되기도 합니다.
특히 매크로 안에 변수 선언이 필요하다면, 필수에 가깝죠.
어? 구조체 어렵네요;;
struct aa bb = {
.cc = dd,
#if 1 // blabla~
.ee = ff,
.gg = hh,
#endif
};
아래와 같이 해도 되는건가요?
.gg = hh,
보통
.gg = hh
로 해야 하는가 아닌가 싶어서요..;
댓글 달기