I/O 호출에서 많이 사용되는 초기 유형으로 시작하여 나중에 유형을 변경하고자 할 수 있습니다. 예를 들어, 우리가 말 : 우리가 나중에 board_idx
의 종류를 변경하는 경우C stdlib 함수에서 형식 지정자 추상화 (예 : printf, scanf)
typedef unsigned short int board_idx;
//...
board_idx k_in;
scanf("%10hu", &k_in);
, 돌아가서 나중에이 일치하도록 이러한 모든 형식 지정을 변경하기 힘든 것입니다.
먼저 형식 지정자 (예 : board_idx
의 형식 정의 옆에있는 것이 좋음)에 연결된 문자열 리터럴을 정의한 다음이를 형식 지정자의 모든 관련 위치에 삽입하는 것이 좋은 방법이라고 생각했습니다. 그러나 이것은 또한 다소 어려워 보입니다 (예 : strcat
사용). 그래서이 상황에서 다른 사람들이 무엇을 할 것인지 궁금합니다.
How to replace a piece of const char* with another string in C?에 대한 접근 방식을 구축하면 형식 바꾸기 코드를 해당 형식에 해당하는 고유 식별자가있는 형식 지정자에 적용 할 수있는 함수로 캡슐화하면 가능할 수 있음을 알 수 있습니다. 위의 scanf
예에서,이 수 :
"%10hu" // should be initially "%board_idx", which can then be replaced
이 방법의 단점은 런타임 비용, 그래서 지금은 형식 지정이 알려진에 포함 된 모든 문자열로 한 프리 프로세서 솔루션은 가장 좋은 것 같아요
// Untested and probably won't work ... I'll call it pseudocode:
#define STR(x) #x
#define STRINGIFY(x) STR(x)
//
#define BOARD_IDX_FMT = %10hu
// "my input is %10hu" becomes:
#define FMTSPEC STRINGIFY(my input is) #BOARD_IDX_FMT
printf(FMTSPEC);
그러나이 또한 많은 형식 지정자가있는 문자열의 경우 매우 복잡 할 수 있습니다.
그냥 매크로에 따옴표를 넣고 모든 문질러 뭉개진 것들을 피하십시오 ..'#define BOARD_IDX_FMT "% 10hu"' –