##을 사용하여 C에서 용어와 카운터를 붙여 넣는 방법은 무엇입니까?

사용자 3931694

임베디드 시스템에서 다음을 정의하십시오.

#define Row1_PORT   GPIOD
#define Row1_PIN    GPIO_PIN_4
#define Row2_PORT   GPIOD
#define Row2_PIN    GPIO_PIN_7
#define Row3_PORT   GPIOD
#define Row3_PIN    GPIO_PIN_1
#define Row4_PORT   GPIOD
#define Row4_PIN    GPIO_PIN_3

//------------
#define Paste2(a,b)   a ## b
#define Paste(a,b)    Paste2(a,b)

#define NRows   4

위의 정의 된 매크로를 다음과 같은 루프에서 사용하고 싶습니다.

for(i=1;i<=NRows;i++)
{
    GPIO_Init(Paste(Paste(Row,i),_PORT),Paste(Paste(Row,i),_PIN),GPIO_MODE_IN_PU_NO_IT);
}

대신에

GPIO_Init(Row1_PORT,Row1_PIN);
GPIO_Init(Row2_PORT,Row2_PIN);
GPIO_Init(Row3_PORT,Row3_PIN);
GPIO_Init(Row4_PORT,Row4_PIN);

가능합니까? __COUNTER__ANSI C 또는 C ++ 와 같은 것이 필요합니다 . 내 컴파일러는 IAR입니다.

조나단 레플러

전처리 기는 컴파일 타임에 실행되며 컴파일러에 제공되는 소스 코드를 텍스트로 수정합니다. 당신이하고자하는 것은 불가능합니다. 컴파일러는 런타임에 i변수 값이 아닌 매크로 확장에 문자 포함합니다 i.

아마도 다음과 같은 것을 사용할 것입니다.

static const int ports[] = { 0, Row1_PORT, Row2_PORT, Row3_PORT, Row4_PORT };
static const int pins[]  = { 0, Row1_PIN,  Row2_PIN,  Row3_PIN,  Row4_PIN  };

for (int i = 1; i <= NRows; i++)
    GPIO_Init(ports[i], pins[i]);

또는 ( '대신'옵션에 표시 한대로) 긴 손으로 작성합니다. 단 4 개의 항목에 대해 약간의 패널티가 있고 약간의 절약이 있습니다. 초기화 할 포트가 100 개라면 물론 루프가 더 좋을 것입니다.

또한 나중에 포트 및 핀 번호를 다시 사용하려는 경우 (초기화 코드가 아닌 코드의 다른 부분에서) 사용 가능한 어레이를 사용하면 더 큰 유연성을 얻을 수 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

파일 이름을 사용하여 Google Spreasheet에서 데이터를 복사하여 다른 파일에 붙여 넣는 방법은 무엇입니까?

분류에서Dev

RealVNC를 사용하여 Windows에서 Mac으로 복사하여 붙여 넣는 방법은 무엇입니까?

분류에서Dev

Python을 사용하여 기존 통합 문서의 기존 시트를 복사하여 붙여 넣는 방법은 무엇입니까?

분류에서Dev

indd 파일 내용을 다른 indd 파일에 복사하여 붙여 넣는 방법은 무엇입니까?

분류에서Dev

우분투에서 터미널을 사용하여 버퍼에서 파일로 직접 붙여 넣는 방법은 무엇입니까?

분류에서Dev

가능한 마법을 사용하여 <textarea>에 붙여 넣은 긴 텍스트를 <div>의 단락으로 나누는 방법은 무엇입니까?

분류에서Dev

VBA를 사용하여 붙여 넣은 그림을 Excel 차트의 중앙에 배치하는 방법은 무엇입니까?

분류에서Dev

jQuery Mobile을 사용하여 클립 보드에서 텍스트를 붙여 넣는 방법은 무엇입니까?

분류에서Dev

Tmux : 붙여 넣기 버퍼 목록에있는 식별자를 사용하여 특정 버퍼를 붙여 넣는 방법은 무엇입니까?

분류에서Dev

Gnome3에서 Nautilus를 사용하여 목록 모드로 붙여 넣는 방법은 무엇입니까? 즉 ... "붙여 넣기"를하려면 어디에서 마우스 오른쪽 버튼을 클릭해야합니까? ( "폴더에 붙여 넣기 ..."아님)

분류에서Dev

InteliJ에서 복사하여 붙여 넣을 때 클래스를 가져 오는 방법은 무엇입니까?

분류에서Dev

줄 번호를 지정하는 레지스터의 내용을 붙여 넣는 방법은 무엇입니까?

분류에서Dev

양식에 복사 / 붙여 넣기를 허용하지 않는 방법은 무엇입니까?

분류에서Dev

터미널에 텍스트를 붙여 넣는 방식을 제어하는 설정은 무엇입니까?

분류에서Dev

사용자가 웹 페이지에 이미지를 붙여 넣을 수 있도록 허용하는 방법은 무엇입니까?

분류에서Dev

Lambda 표현식을 사용하여 ResultSet의 데이터를 HashMap에 넣는 방법은 무엇입니까?

분류에서Dev

복사 / 붙여 넣기를 위해 kPasteboardTypeFileURLPromise와 함께 NSPasteboard를 사용하는 방법은 무엇입니까?

분류에서Dev

jQuery를 사용하여 입력 type = "text"에 문자열을 넣는 방법은 무엇입니까?

분류에서Dev

루프를 사용하여 키보드 입력 값을 배열에 넣는 방법은 무엇입니까?

분류에서Dev

인터넷에서 이미지를 가져 와서 ListView에 붙여 넣는 방법은 무엇입니까?

분류에서Dev

Xcode 7.3을 사용하여 C ++에서 벡터를 사용하는 방법은 무엇입니까?

분류에서Dev

가상 머신 서버에서 내 로컬 머신으로 대용량 Excel 파일을 복사하여 붙여 넣는 방법은 무엇입니까?

분류에서Dev

다른 경우 사전을 사용하여 jsp의 별표 사이에 카운터를 증가시키는 방법은 무엇입니까?

분류에서Dev

angular.js 전에 jquery가로드 될 때 ngPaste 지시문을 사용하여 붙여 넣은 값을 얻는 방법은 무엇입니까?

분류에서Dev

VBscript에서 와일드 카드를 사용하여 파일을 찾고 읽는 방법은 무엇입니까?

분류에서Dev

부모 onMeasure 구현을 복사하여 붙여 넣지 않고 사용자 지정 TextView WRAP_CONTENT 높이를 수정하는 방법은 무엇입니까?

분류에서Dev

C #에서 쉼표를 사용하여 사용자로부터 값을 얻는 방법은 무엇입니까?

분류에서Dev

OneNote 2013에 텍스트 전용 데이터를 붙여 넣는 방법은 무엇입니까?

분류에서Dev

contenteditable div에서 사용자가 붙여 넣은 콘텐츠를 필터링하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    파일 이름을 사용하여 Google Spreasheet에서 데이터를 복사하여 다른 파일에 붙여 넣는 방법은 무엇입니까?

  2. 2

    RealVNC를 사용하여 Windows에서 Mac으로 복사하여 붙여 넣는 방법은 무엇입니까?

  3. 3

    Python을 사용하여 기존 통합 문서의 기존 시트를 복사하여 붙여 넣는 방법은 무엇입니까?

  4. 4

    indd 파일 내용을 다른 indd 파일에 복사하여 붙여 넣는 방법은 무엇입니까?

  5. 5

    우분투에서 터미널을 사용하여 버퍼에서 파일로 직접 붙여 넣는 방법은 무엇입니까?

  6. 6

    가능한 마법을 사용하여 <textarea>에 붙여 넣은 긴 텍스트를 <div>의 단락으로 나누는 방법은 무엇입니까?

  7. 7

    VBA를 사용하여 붙여 넣은 그림을 Excel 차트의 중앙에 배치하는 방법은 무엇입니까?

  8. 8

    jQuery Mobile을 사용하여 클립 보드에서 텍스트를 붙여 넣는 방법은 무엇입니까?

  9. 9

    Tmux : 붙여 넣기 버퍼 목록에있는 식별자를 사용하여 특정 버퍼를 붙여 넣는 방법은 무엇입니까?

  10. 10

    Gnome3에서 Nautilus를 사용하여 목록 모드로 붙여 넣는 방법은 무엇입니까? 즉 ... "붙여 넣기"를하려면 어디에서 마우스 오른쪽 버튼을 클릭해야합니까? ( "폴더에 붙여 넣기 ..."아님)

  11. 11

    InteliJ에서 복사하여 붙여 넣을 때 클래스를 가져 오는 방법은 무엇입니까?

  12. 12

    줄 번호를 지정하는 레지스터의 내용을 붙여 넣는 방법은 무엇입니까?

  13. 13

    양식에 복사 / 붙여 넣기를 허용하지 않는 방법은 무엇입니까?

  14. 14

    터미널에 텍스트를 붙여 넣는 방식을 제어하는 설정은 무엇입니까?

  15. 15

    사용자가 웹 페이지에 이미지를 붙여 넣을 수 있도록 허용하는 방법은 무엇입니까?

  16. 16

    Lambda 표현식을 사용하여 ResultSet의 데이터를 HashMap에 넣는 방법은 무엇입니까?

  17. 17

    복사 / 붙여 넣기를 위해 kPasteboardTypeFileURLPromise와 함께 NSPasteboard를 사용하는 방법은 무엇입니까?

  18. 18

    jQuery를 사용하여 입력 type = "text"에 문자열을 넣는 방법은 무엇입니까?

  19. 19

    루프를 사용하여 키보드 입력 값을 배열에 넣는 방법은 무엇입니까?

  20. 20

    인터넷에서 이미지를 가져 와서 ListView에 붙여 넣는 방법은 무엇입니까?

  21. 21

    Xcode 7.3을 사용하여 C ++에서 벡터를 사용하는 방법은 무엇입니까?

  22. 22

    가상 머신 서버에서 내 로컬 머신으로 대용량 Excel 파일을 복사하여 붙여 넣는 방법은 무엇입니까?

  23. 23

    다른 경우 사전을 사용하여 jsp의 별표 사이에 카운터를 증가시키는 방법은 무엇입니까?

  24. 24

    angular.js 전에 jquery가로드 될 때 ngPaste 지시문을 사용하여 붙여 넣은 값을 얻는 방법은 무엇입니까?

  25. 25

    VBscript에서 와일드 카드를 사용하여 파일을 찾고 읽는 방법은 무엇입니까?

  26. 26

    부모 onMeasure 구현을 복사하여 붙여 넣지 않고 사용자 지정 TextView WRAP_CONTENT 높이를 수정하는 방법은 무엇입니까?

  27. 27

    C #에서 쉼표를 사용하여 사용자로부터 값을 얻는 방법은 무엇입니까?

  28. 28

    OneNote 2013에 텍스트 전용 데이터를 붙여 넣는 방법은 무엇입니까?

  29. 29

    contenteditable div에서 사용자가 붙여 넣은 콘텐츠를 필터링하는 방법은 무엇입니까?

뜨겁다태그

보관