ADS 컴파일러에서 GCC컴파일러로 컴파일시 문제

milkit의 이미지

안녕하세요..

주로 arm ADS의 컴파일러로 작업하다가 arm gcc 컴파일러를 써야할 필요가 있어서

과거에 작업했던 코드를 gcc로 마이그레이션을 하게 되었는데요..

예상치 못한 에러를 발견해서 문의를 드립니다.

코드를 보면 다음과 같습니다.

타입 정의 부분입니다.

/*------------------------------------------------------------------------*/

typedef struct {
void (*create)(int64 playerId, media_type mediaType, const unsigned short* URI, long contentLength);
int (*close)(_handle handle);
int (*acquire_device)(_handle handle);
int (*release_device)(_handle handle);
int (*start)(_handle handle);
int (*stop)(_handle handle);
int (*pause)(_handle handle);
int (*resume)(_handle handle);
} media_basic_interface;

typedef struct {
media_basic_interface* vptrBasic;
media_volume_interface* vptrVolume;
media_video_interface* vptrVideo;
media_snapshot_interface* vptrSnapshot;
media_midi_interface* vptrMidi;
media_record_interface* vptrRecord;
} media_interface;

static media_interface* _itfTable[] = {
&g_video_itf,
&g_audio_itf,
&g_tone_itf,
};

/*------------------------------------------------------------------------*/

그리고 매크로로 정의된 부분입니다.

/*------------------------------------------------------------------------*/

#define QUERY_BASIC_ITF(_pitf_, _method_) \
( (_pitf_) && (_pitf_)->vptrBasic && (_pitf_)->vptrBasic->##_method_ )

/*------------------------------------------------------------------------*/

여기에서 문제는 매크로를 사용한 부분에서 발생합니다.

/*------------------------------------------------------------------------*/

media_interface* pItf;

pItf = _itfTable[mediaType];

if (QUERY_BASIC_ITF(pItf, create)) { // 컴파일 에러발생 !!!
.

.

}

/*------------------------------------------------------------------------*/

그리고 에러 메시지는 다음과 같습니다.

pasting "->" and "create" does not give a valid preprocessing token multimedia.c

아마도 ads와 gcc에서 매크로를 쓰는 방법이 달라서 생기는 컴파일 에러라고 생각이 들지만

어떤식으로 변환을 시켜야 할지 모르겠습니다.

도움을 주시면 감사하겠습니다.


체스맨의 이미지

## 을 빼면 될 것 같습니다.

Orion Project : http://orionids.org

milkit의 이미지

##은 문자열을 연결하기 위해 쓰이는 것으로 알고 있는데 빼도 되나요?

체스맨의 이미지

컴파일은 안해보고, 그냥 코드만 보고 말씀드린 거라 컴파일하면 다른 오류가 날지 모르겠습니다만, 일단 빼서 컴파일 되는지 확인해보세요.

## 이 concatenation 은 맞지만, 저 곳은 이 것을 넣을 필요가 없는 부분입니다. gcc도 그것 때문에 파싱 오류를 낸 것이라 생각되네요.

->##xxx 같은 전처리 표현은 ->xxx 를 하나의 심볼로 인식하게 만든다고 볼 수도 있는데, gcc 파싱도 그런 맥락으로 판단한다고 보여지는데요. 파서를 어떻게 구현했는가에 따라 차이는 있겠지만, 제가 보기엔 gcc 가 좀 더 정확하게 파싱한 것 같군요.

Orion Project : http://orionids.org

milkit의 이미지

답변 감사드립니다~

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.