3
다음과 같이 코드가 삽입되어야하는 매크로를 만들고 싶습니다. 코드에 FOOBAR을 넣습니다. 확실하지는 않지만 컴파일 타임에 컴파일러는 위의 예와 같이 실제 코드로 바꿉니다. 어쩌면 내가 사용할 수있는 매크로와 다른 뭔가가 있을까요?
A
답변
8
\를 사용하여 매크로에 포함 할 각 줄 바꿈을 이스케이프 처리합니다.
그러나주의해서 사용하지 않으면 이러한 매크로를 사용하면 구조를 숨길 수 있습니다. 예를 들면 다음과 같습니다.
if (bar)
FOOBAR();
else
do_something_else();
짐작할 부분이 무엇인지 짐작하십시오. 아마도 당신이 생각하는 것이 아닙니다. 다음은 컴파일러가 보는 것입니다 (들여 쓰기가 조정 됨) :
if (bar)
if (foo)
{
[Bar fooBar];
}
;
else
do_something_else();
이 세미콜론은 별도의 빈 문장입니다. 각 if
에는 단 하나의 명령문 만 사용됩니다. 첫 번째 if
의 문장은 두 번째 if
이고 두 번째 if
의 문장은 복합 문장 ({…}
)이므로 세미콜론을 제외하고 할당량을 모두 충족 시켰습니다.
따라서 세미콜론은 무조건 if
에 바인딩되지 않습니다. 무조건 서술문에 else
을 적용하려고하면 구문 오류가 발생합니다.
수정은, 그것이 추한 같은 do…while
성명에서 FOOBAR
의 내용을 래핑하는 것입니다 :
#define FOOBAR() \
do { \
if (foo) \
[Bar fooBar]; \
} while(0) /*semicolon omitted*/
을 우리가 매크로 정의에 세미콜론을 생략하기 때문에, do…while
때문에, 종결되지 않은 문장이다 매크로 사용법 밖의 세미콜론이 그것에 바인드됩니다. 그리고 우리의 확장 된 코드는 다음과 같습니다 : 당신이 의도 한대로
//First, the unexpanded code again
if (bar)
FOOBAR();
else
do_something_else();
//Expanded
if (bar)
do
{
if (foo)
[Bar fooBar];
}
while(0);
else
do_something_else();
else
지금, if (bar)
에 결합한다.
5
매크로를 여러 행에 정의하려면 마지막 행을 제외한 각 행의 끝에 \를 추가하십시오. 불행히도 실제로 사용하면 매크로가 단일 행으로 확장됩니다.
관련 문제
- 1. 하이퍼 링크가 여러 줄의 코드로 작동하지 않아야합니다.
- 2. 몇 줄의 코드로 LayoutParams 설정
- 3. 문자열을 소스 코드로 돌려주는 매크로를 만드는 방법은 무엇입니까?
- 4. 여러 줄의 문자열에서 여러 패턴을 추출하는 방법
- 5. 매크로를 통해 목차 (TOC)를 만드는 방법
- 6. clojure에서 두 함수를 정의하는 매크로를 만드는 방법
- 7. 여러 줄의 툴팁 텍스트
- 8. 여러 줄의 들여 쓰기
- 9. 여러 줄의 텍스트 상자
- 10. eqnarray의 여러 줄의 중괄호
- 11. 여러 줄의 컨트롤 (열)을 스크롤 가능하게 만드는 방법은 무엇입니까?
- 12. 여러 줄을 선택하려면 매크로를 Excel
- 13. VIM에서 여러 줄의 들여 쓰기
- 14. 여러 줄의 텍스트와 일치하는 정규식
- 15. 여러 줄의 텍스트를 Ant로 바꾸기
- 16. vb.net에서 여러 줄의 문자열 리터럴?
- 17. Xcode에서 동일한 공유 코드로 여러 개의 앱을 만드는 방법은 무엇입니까?
- 18. 자바에서 매크로를 구현하는 방법
- 19. 셀에 걸친 행을 변경하는 Excel 매크로를 만드는 방법
- 20. 매크로를 사용하여 매크로를 만드시겠습니까?
- 21. 줄의 문자열을 끊는 방법
- 22. 여러 개의 다각형을 교차하는 여러 줄의 경우 각 길이를 얻습니다.
- 23. 문자열을 취할 수있는 매크로를 만드는 방법은 무엇입니까?
- 24. Windows에서 매크로를 만드는 데 유용한 도구는 무엇입니까?
- 25. 글립 문자가 x와 y 좌표를 갖는 여러 줄의 글립/텍스트가 병렬로 구성된 GUI를 만드는 방법
- 26. PHP에서 여러 쿼리를 만드는 방법
- 27. 프로그램에서 여러 창을 만드는 방법
- 28. 어떻게 한 줄의 코드로 HTML 코드를 최소화 할 수 있습니까?
- 29. 코드로 인해 여러 레코드가 표시되었습니다.
- 30. Visual Studio에서 여러 줄의 코드 주석을 제거하는 방법
나는 objective-c 매크로가 평범한 C 매크로와 똑같은 것으로 여기에서 큰 가정을하고있다. –
예, C 전 처리기 언어는 Objective-C에서 변경되지 않았습니다. –