Interrupt Vector Table 위치를 옮기는 icf 파일 변경하는 구현 중 이상이 생겼었습니다. Compile 은 잘되는데, flash download 시 "The flash loader program reported an error" 팝업이 뜨면서 writing 이 안되는 문제.
There shall be at most one occurrence of the # or ## operators in a single macro definition
Because the evaluation order of # and ## are not specified, the results of using them both in the same macro could be unpredictable. Therefore macros should contain at most once instance of either # or ##.
해석해보니
"# 및 ## 의연산순서가지정되어있지않기때문에동일한매크로에서둘다사용하는경우에결과를정확히예측할수없기때문에 # 또는 ##을한번만포함해야한다 " 는뜻이다.
[ 오류가예상되는예시 ]
#define NonCompliant(a, b) # a ## b
int main() {
std::cout << NonCompliant(Hello, World);
}
이코드에서컴파일러가 2가지경우를내보낼수있다.
##을먼저연산할경우 : HelloWorld
#을먼저연산할경우 : *Hello "World *
이나올수있다.
[ 규칙을잘지킨예시 ]
#define Stringfy(a) #a
#define Compliant(a, b) Stringfy(a##b)
int main(){
std::cout << Compliant(Hello, World);
}