함수 범위에서 define을 사용할 수 있습니까? 예 :함수 범위에서 define 지시문을 사용할 수 있습니까?
void run() {
#define auto BOOST_AUTO
auto i = v.begin();
//...
}
정의가 함수 뒤에 여전히 유효합니까? 함수로 로컬화할 수 있습니까? (제발 C++ 11을 사용하라고 말하지 마십시오.)
함수 범위에서 define을 사용할 수 있습니까? 예 :함수 범위에서 define 지시문을 사용할 수 있습니까?
void run() {
#define auto BOOST_AUTO
auto i = v.begin();
//...
}
정의가 함수 뒤에 여전히 유효합니까? 함수로 로컬화할 수 있습니까? (제발 C++ 11을 사용하라고 말하지 마십시오.)
매크로의 범위 (사전 처리기 내에서)는 해당 정의 지점에서 해당 #undef
또는 변환 단위의 끝 부분까지입니다. 전 처리기는 코드의 기능이나 다른 구조에 대해 아무것도 모릅니다.
#define
은 함수가하는대로 자체 범위를 유지하지 않습니다. 그들은 순진하게 전 처리기로 대체됩니다.
#define
키워드는 의 정의되지 않은 동작으로 연결됩니다. 이것은 컴파일러의 책임입니다. 나는 대부분의 컴파일러가 여러분의 아이디어를 얻고 auto
의 모든 경우를 BOOST_AUTO
으로 대체한다고 가정합니다.
"정의되지 않은 동작"을 의미합니까? 그렇지 않으면 "예기치 않은 동작이지만 일반적으로 예상대로 작동합니다 ..."라고 말하는 것입니다. – Angew
처음 두 행이 여기에서 표절되었습니다. - http://stackoverflow.com/questions/12641091/limit-scope-of-define - 레이블 –
함수 범위에서 define을 사용할 수 있습니까?
예 전처리 지시문을 어디에서나 사용할 수 있습니다. cpp는 c/C++ 구문을 인식하지 못합니다. 함수 범위가 끝나기 전에 #undef
지시문을 넣으십시오.
예를 사용할 수도 있지만 스코프 기능을 수행하는 #undef
지시문이 필요합니다.
키워드를 정의하려고하면 결과가 이고 정의되지 않은 동작은이됩니다.
#undef는 무엇입니까? –
'#define '키워드를 사용하면 예기치 않은 동작이 발생할 수 있습니다! :) – poitroae
여기서'auto '를 대체 할 때'BOOST_AUTO'는 작동하지 않습니다 (함수와 비슷한 매크로이므로 괄호 안에 쉼표로 구분 된 인수 목록이 필요합니다). –