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 의 함수선언부를 모두 변환해 줄겁니다. 한번 테스트 해 보세요
감사합니다. 해 보았는데요. 되는 경우도 있고 안되는 경우가 종종 생깁니다.
하나의 코딩 방식이고 여전히 gcc 에서는 지원을 하는데 왜 g++ 에서는 지원이 안되는지.
컴파일러 옵션으로 해결할 수는 없는지요.. 나름 찾아봤는데 잘 모르겠더라구요..
C로 작성된 것을 왜 g++로 컴파일하려고 하시나요?
C와 C++을 같이 사용하기 위함이라면, 그냥 C의 헤더파일에 extern "C" 를 활용해서 해결하는 것이 일반적인 선택입니다.http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html
g++에는 예전 K&R 스타일 정의를 지원하는 옵션이 없는 것 같습니다. C++에서는 C의 전통적인 함수 정의를 인정하지 않는 것 같습니다. 결국은 소스를 변환해버리는 방법 밖에 없을 것 같습니다.
비슷한 고민을 먼저 한 사람이 분명히 있을 것 같아서 구글링을 해보니 protoize란 게 있네요. GCC 매뉴얼에서도 예전 K&R 스타일 정의를 ANSI 스타일로 변경하는 것에 대해 매뉴얼을 할애해서 설명하고 있습니다.
http://gcc.gnu.org/onlinedocs/gcc/Running-Protoize.htmlhttp://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} #=> truehttp://rubykr.org
----http://nohmad.tumblr.com/
구글링시 어떤 키워드를 사용하셨나요 ??? 궁금... 합니다..
----------------------------- in the real-time scheduler !
C 표준에서도 그러한 형식은 구식기술로 취급합니다만 이미 존재하는 code 에 대해서는 호환을 유지해야 했기 때문에 받아들였습니다.
그런 식으로 함수를 정의할 경우 함수원형선언에서 매개변수의 type 을 명시하지 않게 되는데 이것은 명시적인 함수원형선언의 장점을 인식하지 못하던 시절에 쓰이던 것입니다.
C++ 의 시작은 C 이후에 시작되었으므로 그런 형태를 받아들이지 않아도 되었던 것입니다.
어찌되었든 가장 좋은 방법은 역시 C compiler 로 compile 하고 linking 을 위하여 extern "C" !!!
좋은 말씀들 감사합니다.
텍스트 포맷에 대한 자세한 정보
<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]
gema 로 변환해 보았습니다.
위 내용으로 conv.gema 텍스트 파일을 하나 만드시고
gema -f conv.gema myProg.c 하시면 myProg.c 의 함수선언부를 모두 변환해 줄겁니다.
한번 테스트 해 보세요
감사합니다만.
감사합니다. 해 보았는데요.
되는 경우도 있고 안되는 경우가 종종 생깁니다.
하나의 코딩 방식이고 여전히 gcc 에서는 지원을 하는데 왜 g++ 에서는 지원이 안되는지.
컴파일러 옵션으로 해결할 수는 없는지요.. 나름 찾아봤는데 잘 모르겠더라구요..
C로 작성된 것을 왜
C로 작성된 것을 왜 g++로 컴파일하려고 하시나요?
C와 C++을 같이 사용하기 위함이라면, 그냥 C의 헤더파일에 extern "C" 를 활용해서 해결하는 것이 일반적인 선택입니다.
http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html
protoize 란 게 있네요.
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
----
http://nohmad.tumblr.com/
구글링시 어떤
구글링시 어떤 키워드를 사용하셨나요 ???
궁금... 합니다..
-----------------------------
in the real-time scheduler !
표준대로 동작하는 겁니다.
C 표준에서도 그러한 형식은 구식기술로 취급합니다만 이미 존재하는 code 에 대해서는
호환을 유지해야 했기 때문에 받아들였습니다.
그런 식으로 함수를 정의할 경우 함수원형선언에서 매개변수의 type 을 명시하지 않게 되는데
이것은 명시적인 함수원형선언의 장점을 인식하지 못하던 시절에 쓰이던 것입니다.
C++ 의 시작은 C 이후에 시작되었으므로 그런 형태를 받아들이지 않아도 되었던 것입니다.
어찌되었든 가장 좋은 방법은 역시 C compiler 로 compile 하고 linking 을 위하여
extern "C" !!!
답변 감사합니다.
좋은 말씀들 감사합니다.
댓글 달기