유니코드로 작성된 C파일을 gcc로 컴파일 시킬수 있을까요?

dreampia의 이미지

유니코드로 작성된 .c 문서를 gcc로 컴파일 하고 싶은데...

컴파일을 시도하면 아래와 같이 문서를 읽지 못해서 에러가 나는데

유니코드 파일을 컴파일 하게 할 수 있나요?

서버 환경은 Solaris 9.0이고 gcc는 3.3.2입니다.

소스는

#include

int main(int argc, char **argv)
{
printf("ậ ệ đ \n");
exit(0);
}

이고 유니코드로 저장하고 컴파일 하면 아래와 같이 됩니다.

[12:50:30 temp] (o^^o) $ make z
gcc -O2 -g -Wall -D_REENTRANT -I. -c z.c
z.c:1: error: stray '\377' in program
z.c:1: error: stray '\376' in program
z.c:1: error: syntax error at '#' token
z.c:1:4: warning: null character(s) ignored
z.c:1:6: warning: null character(s) ignored
z.c:1: error: parse error before "n"
z.c:1:8: warning: null character(s) ignored
z.c:1:10: warning: null character(s) ignored
z.c:1:12: warning: null character(s) ignored
z.c:1:14: warning: null character(s) ignored
z.c:1:16: warning: null character(s) ignored
z.c:1:18: warning: null character(s) ignored
z.c:1:22: warning: null character(s) ignored
z.c:1:24: warning: null character(s) ignored
z.c:1:26: warning: null character(s) ignored
z.c:1:28: warning: null character(s) ignored
z.c:1:30: warning: null character(s) ignored

정태영의 이미지

유니코드를 ucs_2, ucs_4 같은 케릭터셋으로 표현할 경우 c style 의 null terminated string 을 사용할 수 없습니다. utf-8 이라면 상관이 없겠지만요.

ucs_2 로 된 '가' 를 변수에 집어넣는다면 아래와 같이 해야 합니다.

wchar str = 0xAC00;

"가가가" 같은 식이라면

wchar str[3] = { 0xAC00, 0xAC00, 0xAC00 };

식으로 하셔야 하구요. 아니면 아래와 같은 방식도 괜찮습니다.

unsigned char* str[3] = "0xAC0x000xAC0x00";

--
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

Necromancer의 이미지

utf8이면 *영문만을 썼다는 가정하에* 가능합니다.
(단 주석은 제외, char*에 들어가는 문자열에 한글이 들어간 경우는 euckr대신 utf8인코딩으로 들어감)

하지만 utf16이나 32이면 안됩니다.

Written By the Black Knight of Destruction

Written By the Black Knight of Destruction

정태영의 이미지

utf-8 이면 변수명 같은데 한글을 사용하지 않는 이상 '한글' 이건 '영어' 이건 상관없이 잘 입력할 수 있고, 컴파일도 할 수 있습니다.

--
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

바라미의 이미지

utf8 이라면 한글 사용 가능 할 겁니다...

http://barami.org/archives/24

제가 직접 겪어본 일인데. gcc 에서는 utf8 이라면 한글 사용 가능할 겁니다.

kslee80의 이미지

유니코드로 저장했다면,
문서 맨 앞에 오는 BOM 때문에 문제가 되는게 아닐까 싶네요.

(물론 이미 다른 분께서 언급하셨듯이, utf-8 이 아니라면 BOM 에 상관없이 안 될 겁니다)

익명 사용자의 이미지

http://www-online.kek.jp/~keibun/pukiwiki/index.php?MinGW%A4%CB%A4%C4%A4%A4%A4%C6

일본어로 된 문서인데 일본어 몰라도 대충 뜻은 이해가 가실 것입니다.

MinGW으로 일본어 소스를 컴파일하는 방법인데 리눅스에서도 동일한 옵션이 있을 것 같군요.

gcc -DUNICODE -finput-charset=CP932 -fexec-charset=UCS-2LE whello.c -mwindows

thyoo의 이미지

Linux에서 Unicode를 쓸 일이 생겨서
결과를 정리하겠습니다.

gcc의 charset에 관한 option은 다음과 같습니다.

-finput-charset
: source code(c, C, cc, cxx, cpp, h, ....) 자체를 어떤 charset으로 저장했는가

-fexec-charset
: string literal ""을 어떤 charset으로 취급할 것인가

-fwide-exec-charset
: wide string literal L""을 어떤 charset으로 취급할 것인가

___________________________________
Less is More (Robert Browning)

___________________________________
Less is More (Robert Browning)

오호라의 이미지

아마도 gettext() 또는 cat_open()를 쓰시는게 좋을 겁니다.

괴로움과 짜증이 가까운 미래에 찾아 올 수도...

Hello World.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.