2011-01-19 2 views
3

GCC -fextended-ID는 어떻게 ''[같은 문자 나 #와 식별자 이름을 쓸 수 있습니다 내가, 내가 오류를 줄 것을 수행하려고C 보편적 인 매크로 이름 - 내가 찾고

매번를 :.

error: macro names must be identifiers

그러나 GCC에 대해 배우고,이 옵션을 발견?

-fextended-identifiers

하지만 내가 원하는처럼, 누군가 그것을 달성하는 방법을 알고하십시오 작동하지 않는 것 같습니다를

+2

여기보세요 http://stackoverflow.com/questions/369495/what-are-the-valid-characters-for-macro-names – Elalfer

+4

이것은 절대적으로 끔찍한 생각처럼 보입니다. 해결하려는 근본적인 문제는 무엇입니까? 왜 당신이 이것을하고 싶은지 설명 할 수 있다면, 아마도 우리는 당신이 그것을 달성하는 덜 나쁜 방법을 찾도록 도울 수 있습니다. –

+0

나는 식별자 이름에 이와 같은 문자를 쓰려고하는데, C prerpocessor 만 사용하여 피드백을 주려고한다. – drigoSkalWalker

답변

0

this link에 따르면 -fextended-identifiers은 식별자에 대해 UTF-8 지원 만 가능하므로 사용자의 경우 도움이되지 않습니다.

그래서 대답은 다음과 같습니다. 매크로 식별자에는 이러한 문자를 사용할 수 없습니다.

+0

예,하지만 [ ' "는 UTF-8 정렬의 일부이다. 그렇지 않습니까? – drigoSkalWalker

+0

UTF-8과 함께 제공되는 * 추가 ​​* 문자의 일부가 아닙니다. 중요한 점은 원하는 모든 문자가 이미 컴파일러에서 의미가있는 반면 UTF-8 문자는 모든 명령문, 연산자 또는 유사한 컴파일러에 사용되지 않는다는 것입니다. – schnaader

+1

그리고 그 FAQ는 '네이티브'UTF-8조차도 직접 지원되지 않는다는 것을 나타냅니다. '\ uNNNN' 또는'\ UNNNNNNNN' 유니버설 문자 만 지원됩니다.'네이티브 ' 확장 문자를 범용 표기법으로 변환합니다. –

2

식별자에는 이러한 문자를 사용할 수 없습니다. 언어 구문에서 식별자는 문자, 숫자 또는 밑줄로 정의됩니다 (단락 문자로 모호하지 않도록 숫자로 시작하지 않아야 함).

가능하면 C 컴파일러 ([for arrays] 및 C preprocessor 구문 (# 사용) 사용)와 충돌 할 수 있습니다. 확장 식별자 확장은 식별자 내부의 언어 구문에 의해 금지되지 않는 문자 사용을 허용합니다 (기본적으로 유니 코드 외부 문자 등).

하지만 정말로 이것을 원한다면, nothings는 자신의 "확장 매크로 전처리 기"로 소스 파일을 사전 처리하지 않고 사실상 "C와 비슷한"언어를 만듭니다. 그것은 끔찍한 생각처럼 보입니다. 그러나 그렇게하는 것이 어렵지 않습니다. 그것은 좋은 생각이 아니다 왜 그럼 당신은 ... 자신이 곧 볼 수

+0

그래, 어쨌든 좋은 생각이 아니야. – drigoSkalWalker

+0

"식별자는 문자, 숫자 또는 밑줄입니다.": C99에서는 true가 아님 : http : // stackoverflow.com/questions/34319000/what-constituutes-a-valid-c-identifier –

0
확장 식별자 문자 지원이 완전히 활성화 된 경우에도 당신과 같은 문자를 얻을 도움이되지 것

:

[ ' " # 

에서 식별자를 사용할 수 있습니다. 표준은 '범용 문자 이름'또는 '기타 구현 정의 문자'를 식별자의 일부로 사용할 수 있지만 기본 문자 집합의 일부가 될 수 없습니다. 기본 문자 집합 중 _ 만 문자와 숫자를 식별자 이름 (6.4.2.1 식별자/일반)의 일부로 사용할 수 있습니다.