매크로에서 문자열 배열을 가져 가고 싶습니다. 첫째로 가능합니까?매크로에서 문자열 배열
예, 색인을 사용하여 색인을 사용할 때 하나씩 호출 할 수 있습니까? 이 같은
뭔가 그런 다음
#define VAR "abc", "def", "xyz"
어디 선가 "DEF"를 사용하려면,
FUNC(VAR[1]);
매크로에서 문자열 배열을 가져 가고 싶습니다. 첫째로 가능합니까?매크로에서 문자열 배열
예, 색인을 사용하여 색인을 사용할 때 하나씩 호출 할 수 있습니까? 이 같은
뭔가 그런 다음
#define VAR "abc", "def", "xyz"
어디 선가 "DEF"를 사용하려면,
FUNC(VAR[1]);
#define VAR(...) const char *FOO[] = { __VA_ARGS__ }
...
VAR("abc", "xyz");
printf("%s\n", FOO[0]);
그러나주의 :
두 번째 포인트를 구독합니다. :) 적어도 변수를'char const * []'로 선언하는 것이 중요합니다. 그리고 네가하는 것처럼, 네, 이건 악한 일입니다. 결코 그렇게하지 말아야합니다. 변수의 이름을 인수로 제공하십시오. –
@JensGustedt, 고마워, 나는 'const char *'로 바꿨다. 이름과 함께하는 법을 모릅니다. OP는 문자열을 매개 변수로받는 매크로를 원합니다. 오해가있을 수 있다고 생각합니다. – maverik
매크로는 오른쪽에있는 텍스트로 확장 그래서 귀하의 질문에 대답하려고합니다 당신 자신.
FUNC(VAR[1]); <=> FUNC("abc", "def", "xyz"[1]);
이 오른쪽에 하나가 예상 무엇을 할 것 : 여기
매크로-S를 이해하려고 노력하는 방법입니다? 아니? 그렇다면 이것을 사용할 수 없습니다. 그러나 이것을 정적 배열 초기화에 사용할 수 있으며 예를 들어 색인을 사용하여 배열에 액세스 할 수 있습니다.편집 :
char* a[] = {VAR};
FUNC(a[0]);
당신에게 내 코드가 도움이 될 수있다
는#include<stdio.h>
#include<stdlib.h>
#define STRING_ARRAY "ONE", "TWO", "THREE", "NULL"
int main(){
char* STRING[] = {STRING_ARRAY};
int i=0;
scanf("%d",&i);
printf("%s\n",STRING[i]);
return EXIT_SUCCESS;
}
이것은 또한 작동합니다
:~$ gcc x.c -o x
:~$ ./x
1
TWO
e:~$ ./x
2
THREE
에만 재 컴파일시에 매크로를 변경해야합니다.
C99를 시작으로 당신은 복합 리터럴
#define VAR ((char const*[]){ "abc", "def", "xyz" })
를 사용하고
VAR[2]
정도로 사용.
복합 문자 리터럴은 이니셜 라이저의 캐스트와 유사합니다. 여기에서 기본 유형 char const*
의 배열입니다. const
은 실수로 문자열 리터럴을 수정하지 않으므로 중요합니다.
모든 최신 컴파일러는 해당 배열과 문자열 리터럴의 모든 다른 어커런스를 단일 인스턴스로 접을 수 있어야합니다.
루프에서 이것을 사용하고 있는데 작동하지 않습니다. VAR [i]; ? – Sunny
@Sunny는 "작동하지 않습니다"? 좀 더 구체적으로 말씀해 주시겠습니까? –
매크로 사용 방법에 대한 예를 들려 줄 수 있습니까? 코드 스 니펫일까요? –
나는 주된 질문을 편집했다. 나는 이런 것을 원하니? 가능한 경우, 가장 가까운 가능한 해결책은 무엇입니까? 감사합니다 – Sunny