#define의 값을 런타임에 설정하는 방법이 있는지 궁금합니다.런타임시 #define의 값을 설정하는 방법이 있습니까?
아래 코드에서 Oracle 및 Sql Server에 대한 쿼리가 있다고 가정합니다.
#define oracle
// ...
#if oracle
// some code
#else
// some different code.
#endif
#define의 값을 런타임에 설정하는 방법이 있는지 궁금합니다.런타임시 #define의 값을 설정하는 방법이 있습니까?
아래 코드에서 Oracle 및 Sql Server에 대한 쿼리가 있다고 가정합니다.
#define oracle
// ...
#if oracle
// some code
#else
// some different code.
#endif
는 컴파일러조차보기 전에 물론, # 정의는 전처리에 의해 컴파일하지 - 그래서 토큰 '신탁'단지 '1'또는 '0'코드에서조차 없습니다. #define을 전역 변수로 변경하거나 올바른 값을 반환하는 함수를 사용하는 것이 좋습니다.
#if
은 컴파일 타임입니다. 빌드 프로세스 (msbuild/csc 스위치를 통해)에서 지정할 수 있지만 실제로 런타임에는 지정할 수 없습니다. 제외 코드 은 존재하지 않습니다. 당신은 더 나은 (1)에 통보 될 수 있습니다
아니요, 전 처리기는 컴파일하기 전에 실행되며 런타임에 코드를 기반으로 동작을 전환하려는 경우 해당 시점의 코드를 변경할 수 있습니다. 조건부 논리.
디자인이 잘못되었습니다. 틀렸어. 이것은 20 년 전에 받아 들여 졌을 지 모르지만, 여기에 필요한 것을하기위한 기술이 많이 있습니다.
실제 구현 (SQL 기반 또는 오라클 기반)에 의존하지 않는 인터페이스로 모든 데이터 액세스 로직을 분리 한 다음 DI/IoC를 사용하여 런타임에 원하는 구현을 주입해야합니다. 소리보다 훨씬 간단하고 매우 뛰어나며 코드를 쉽게 테스트 할 수 있으며 전체 재설치없이 응용 프로그램을 사용자 정의하고 업데이트 할 수 있습니다.
관련 질문 :
이 https://stackoverflow.com/questions/45191/ioc-explain-and-more-important-when-to-use-it
Inversion of Control with .net
https://stackoverflow.com/questions/71041/which-single-iocdi-container-would-you-recommend-using-and-why
물론, 더 나은 솔루션이 존재한다. 어쩌면 내가 그걸 묻는거야. 그리고 저는 이것이 이것이 "가정"이라고 지적했습니다. 그 방법으로도 솔루션을 사용하지 않을 것입니다. 이 예제는 방법이 있는지를 배우는 예제 일뿐입니다! –
공격적입니까? 쳇. – Will