c파일을 g++로 컴파일 할 때.

unlikeme의 이미지

c 파일 중에 함수 구현에 보면..

int
aa(num, buf)
int num;
char * buf;
{

}

이런 식으로 되어 있는게 있는데..

이걸 gcc 로 컴파일 하면 이상이 없는데...

g++로 컴파일 하면 에러가 납니다.

이걸...

int aa(int num,char * buf)
{

}

이렇게 바꾸면 g++ 로도 컴파일이 되는데...

파일이 워낙 많아놔서. 바꾸기가 쉽지 않은데. 방법이 있는지요?

임창진의 이미지

<TYPE> <I>(<PARAMS>) <U>\{=$1 $2(@param2paramdef{$4\{})\n\{
 
TYPE:<I>=$1@end
TEPE:=@fail
 
PARAMS:<A_PARAM><s>,<s><PARAMS>=$0@end
PARAMS:<A_PARAM><s>\P)=$1@end
PARAMS:=@fail
 
A_PARAM:<I>=$1@end
 
param2paramdef:\;<s>\{=
param2paramdef:\;=,
param2paramdef:\n=
param2paramdef:<U1>=$1
 
PARAMDEF:<A_PARAMDEF><s><PARAMDEF>=$0@end
PARAMDEF:<A_PARAMDEF><s>\{=$1@end
PARAMDEF:=@fail
 
A_PARAMDEF:<TYPE> <I><s>\;=$0@end
A_PARAMDEF:=@fail

위 내용으로 conv.gema 텍스트 파일을 하나 만드시고
gema -f conv.gema myProg.c 하시면 myProg.c 의 함수선언부를 모두 변환해 줄겁니다.
한번 테스트 해 보세요

unlikeme의 이미지

감사합니다. 해 보았는데요.
되는 경우도 있고 안되는 경우가 종종 생깁니다.

하나의 코딩 방식이고 여전히 gcc 에서는 지원을 하는데 왜 g++ 에서는 지원이 안되는지.

컴파일러 옵션으로 해결할 수는 없는지요.. 나름 찾아봤는데 잘 모르겠더라구요..

ssehoony의 이미지

C로 작성된 것을 왜 g++로 컴파일하려고 하시나요?

C와 C++을 같이 사용하기 위함이라면, 그냥 C의 헤더파일에 extern "C" 를 활용해서 해결하는 것이 일반적인 선택입니다.
http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html

nohmad의 이미지

g++에는 예전 K&R 스타일 정의를 지원하는 옵션이 없는 것 같습니다. C++에서는 C의 전통적인 함수 정의를 인정하지 않는 것 같습니다. 결국은 소스를 변환해버리는 방법 밖에 없을 것 같습니다.

비슷한 고민을 먼저 한 사람이 분명히 있을 것 같아서 구글링을 해보니 protoize란 게 있네요. GCC 매뉴얼에서도 예전 K&R 스타일 정의를 ANSI 스타일로 변경하는 것에 대해 매뉴얼을 할애해서 설명하고 있습니다.

http://gcc.gnu.org/onlinedocs/gcc/Running-Protoize.html
http://hpux.cs.utah.edu/hppd/hpux/Sysadmin/protoize-1.0/
http://hpux.cs.utah.edu/hppd/hpux/Sysadmin/protoize-1.0/man.html

protoize를 설치해서 써보니, 간단한 소스는 잘 변환하는군요. 대신 어처구니 없게도, 입력파일명을 체크해서 *.c가 아니면 진행을 안하는군요. -_-;

$ruby.is_a?(Object){|oriented| language} #=> true
http://rubykr.org

hongwoo의 이미지

구글링시 어떤 키워드를 사용하셨나요 ???
궁금... 합니다..

-----------------------------
in the real-time scheduler !

winner의 이미지

C 표준에서도 그러한 형식은 구식기술로 취급합니다만 이미 존재하는 code 에 대해서는
호환을 유지해야 했기 때문에 받아들였습니다.

그런 식으로 함수를 정의할 경우 함수원형선언에서 매개변수의 type 을 명시하지 않게 되는데
이것은 명시적인 함수원형선언의 장점을 인식하지 못하던 시절에 쓰이던 것입니다.

C++ 의 시작은 C 이후에 시작되었으므로 그런 형태를 받아들이지 않아도 되었던 것입니다.

어찌되었든 가장 좋은 방법은 역시 C compiler 로 compile 하고 linking 을 위하여
extern "C" !!!

unlikeme의 이미지

좋은 말씀들 감사합니다.

댓글 달기

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