2017-01-21 12 views
-1

다음과 같은 매크로가 있습니다.전 처리기 지시문을 malloc하는 방법

#define WR_BLK_SIZE_REGINFO 123 

도서관 프로젝트 (.a)에서이 매크로를 사용하고 있습니까? 라이브러리 프로젝트는 "WR_BLK_SIZE_REGINFO"의 크기가 라이브러리 프로젝트에 정적으로 할당되어 변경 될 수없는 사전 컴파일됩니다.

어떻게 전 처리기 지시문 코드를 동적으로 할당 할 수 있습니까?

다음과 같이 지정합니다. 그게 가능하니?

#define WR_BLK_SIZE_REGINFO malloc 

혼란스러운 경우 더 자세히 설명 드리겠습니다.

-이 매크로는 무엇을 사용합니까?

Ans :이 매크로는 내 라이브러리 프로젝트의 다양한 파일에 사용됩니다. 코드의 복잡성을 줄이기 위해 나는

  • 왜 매크로를 malloc을 하시겠습니까 크기를 해결하기 위해 매크로를 사용하고?

Ans :이 라이브러리 프로젝트는 많은 컨트롤러에서 사용되는 라이브러리 프로젝트를 수행하고 있습니다. 각 컨트롤러에는 자체 메모리 세트가 있습니다. 그래서 나는 그 매크로의 크기를 정적으로 고정시킬 수 없다. 컨트롤러 메모리에 따라 달라질 필요가 있기 때문입니다.

몇 가지 코드를 보여 주시겠습니까?

는 sample.h

#define WR_BLK_SIZE_REGINFO 123 

하여 Sample.c

if(!((numItems >= 1) && (numItems <= WR_BLK_SIZE_REGINFO))) 
{ 
    // logic    
} 

sample1.c

if(!((numItemsWrite >= 1) && (numItemsWrite <= WR_BLK_SIZE_REGINFO))) 
{ 
    // logic  
} 

주 1 : 위의 모든 파일은 미리 컴파일 된 라이브러리 파일이며 여기에서 "123"이 수정되었습니다. 수정하지 않으려합니다. 나는 동적으로 할당하고 싶다.

주 2 : malloc이 올바른 선택인지 확실하지 않습니다. 라이브러리 프로젝트에서 또는 런타임에 응용 프로그램 프로젝트 (라이브러리 프로젝트에서 응용 프로그램 프로젝트로 입력 123)

을 입력하는 동안 런타임에 "123"을 입력해야합니다. 참고 : 3 : 라이브러리 프로젝트는 MPLAB X IDE, 기본적으로 마이크로 칩 프로젝트입니다.

+0

왜'int WR_BLK_SIZE_REGINFO = 123;'가 아닌가? –

+0

WR_BLK_SIZE_REGINFO가 1000의 장소에서 사용되고 다른 파일에 적어도 약 10-15 개의 파일이 사용 되었기 때문에 매크로가 필요합니다 – kaviarasan

+2

매크로와 동일하게 작동합니까? 그렇습니다. 표시 한 샘플 코드는 여전히 작동해야합니다. 물론 WR_BLK_SIZE_REGINFO를 가정하는 코드는 컴파일 시간 상수를 다시 작성해야하지만 불가피합니다. –

답변

1

샘플 있음.H : 그것은 더 이상하지 않기 때문에 일부 C 파일 WR_BLK_SIZE_REGINFO을 가정 코드는 컴파일 타임 상수는 것입니다 곳

static int wr_blk_size = 123; 
static int set_wr_blk_size(int j) { wr_blk_size = j; } 
int get_wr_blk_size(void) { return wr_blk_size; } 

주에서

int get_wr_blk_size(void); 
#define WR_BLK_SIZE_REGINFO get_wr_blk_size() 

는 다시 작성합니다.

+0

이 특정 솔루션에서 '#define WR_BLK_SIZE_REGINFO wr_blk_size'를 사용하지 않는 이유는 무엇입니까? –

+0

그러면'x = WR_BLK_SIZE_REGINFO ++;'또는'foo (& WR_BLK_SIZE_REGINFO)'와 같은 에러는 매크로와 같이 원하지 않는다. –