2014-02-27 4 views
3

함수 범위에서 define을 사용할 수 있습니까? 예 :함수 범위에서 define 지시문을 사용할 수 있습니까?

void run() { 
    #define auto BOOST_AUTO 
    auto i = v.begin(); 
    //... 
} 

정의가 함수 뒤에 여전히 유효합니까? 함수로 로컬화할 수 있습니까? (제발 C++ 11을 사용하라고 말하지 마십시오.)

+1

#undef는 무엇입니까? –

+1

'#define '키워드를 사용하면 예기치 않은 동작이 발생할 수 있습니다! :) – poitroae

+0

여기서'auto '를 대체 할 때'BOOST_AUTO'는 작동하지 않습니다 (함수와 비슷한 매크로이므로 괄호 안에 쉼표로 구분 된 인수 목록이 필요합니다). –

답변

3

매크로의 범위 (사전 처리기 내에서)는 해당 정의 지점에서 해당 #undef 또는 변환 단위의 끝 부분까지입니다. 전 처리기는 코드의 기능이나 다른 구조에 대해 아무것도 모릅니다.

1

#define은 함수가하는대로 자체 범위를 유지하지 않습니다. 그들은 순진하게 전 처리기로 대체됩니다.

#define 키워드는 의 정의되지 않은 동작으로 연결됩니다. 이것은 컴파일러의 책임입니다. 나는 대부분의 컴파일러가 여러분의 아이디어를 얻고 auto의 모든 경우를 BOOST_AUTO으로 대체한다고 가정합니다.

+1

"정의되지 않은 동작"을 의미합니까? 그렇지 않으면 "예기치 않은 동작이지만 일반적으로 예상대로 작동합니다 ..."라고 말하는 것입니다. – Angew

+0

처음 두 행이 여기에서 표절되었습니다. - http://stackoverflow.com/questions/12641091/limit-scope-of-define - 레이블 –

1

함수 범위에서 define을 사용할 수 있습니까?

예 전처리 지시문을 어디에서나 사용할 수 있습니다. cpp는 c/C++ 구문을 인식하지 못합니다. 함수 범위가 끝나기 전에 #undef 지시문을 넣으십시오.

1

예를 사용할 수도 있지만 스코프 기능을 수행하는 #undef 지시문이 필요합니다.

키워드를 정의하려고하면 결과가 이고 정의되지 않은 동작은이됩니다.

관련 문제