폐쇄 . 이 질문은
의견 기반 입니다. 현재 답변을 받고 있지 않습니다.
댓글
답변
하지만 오늘날 전체 게임 엔진을 C로 작성하는 것이 비합리적일까요?
합리적이지만 C가 제공하는 극도의 이식성이 필요하지 않을 것입니다. “정말 철학적으로 반대하지 않는 한 C ++이 제공하는 모든 기능을 포기하는 것은 부끄러운 일입니다.
C가 C ++에 비해 어떤 이점이 있습니까?
더 나은 컴파일 시간?
누군가가 C ++보다 C를 사용하고 싶으신가요?
대부분 미적인 선택이라고 생각합니다. 많은 사람들이 C가 단순하고 최소한이며 깔끔하다고 느끼기 때문에 좋아합니다. C ++에는 멋진 기능이 많이 있지만 (네임 스페이스만으로도 사용할 가치가 있습니다) 크고 지저분합니다.
댓글
댓글
Answer
여러 제품을 출시 한 pure-C 게임 엔진으로 광범위하게 작업 해 왔기 때문에 가능합니다. 다음은 C 엔진과 C ++ 엔진 모두에서 작업 한 개인적인 경험입니다.
- 순수 C 구조를 사용하면 구조 정렬에 대한 지식을 활용할 수 있고이 정보를 사용할 수 있습니다. 객체 지속성 및 직렬화 계층을 구축합니다. 제가 함께 작업 한 엔진에는 구조에 대한이 메타 데이터를 자동으로 생성하는 간단한 헤더 파서가 있었으며 특정 유형의 데이터 작업을 간단하게 만들었습니다. 임의의 C ++ 헤더 파일을 파싱하는 것은 본질적으로 불가능하며 곧 상속 및 가상 함수를 추가하면 메모리의 정확한 위치를 알 수있는 기능을 잃게됩니다.
- 헤더 파일을 매우 간결하게 유지하고 구조의 포워드 선언을 활용할 수 있기 때문에 컴파일 시간이 상당히 단축됩니다.
- 템플릿과 상속을 사용하지 않으면 특정 개체가 무엇인지, 무엇을하는지 정확히 파악하기가 매우 쉽기 때문에 디버깅을 개선 할 수 있습니다.
이러한 모든 이점은 직렬화 된 개체에 대한 템플릿 및 상속을 사용하지 않는 제한된 C ++ 코드를 사용하여 쉽게 달성 할 수 있지만 더 쉬울 것이라는 CTO의 결정이었습니다. C ++의 더 혼란스러운 요소를 사용할 수없는 경우 단순성을 강화하기 위해.
개인적으로는 for 루프에서 변수를 올바르게 선언 할 수있는 기능과 완전히 합법적 인 용도를 놓 쳤기 때문에 약간 극단적이라고 생각합니다. 하지만 결국에는 모든 것을 고려하여 결과적으로 많은 생산성을 잃지 않았습니다.
댓글
Answer
C ++와 Lua로 작성된 2D 게임 엔진을 C와 Lua로 다시 작성하고 있습니다. 지금까지 경험은 꽤 좋았습니다. 분명히 벡터 및 행렬 연산을 수행하는 것은 C에서보기에는 좋지 않습니다. 그러나 그 외에는 C ++ 개발자로 10 년 이상을 보낸 후 경험이 상당히 새로워졌습니다.
C에는 여러 가지가 있습니다. C ++에 비해 장점 :
- 컴파일러는 정적 초기화 시간에 코드가 실행되지 않도록합니다. 따라서 키로 사용되는 문자열과 같은 전역 데이터를 정적으로 할당하는 것이 완전히 안전합니다. 예 :
- 투명성. C 할당에서 변수를 할당하거나 정의한다고해서 많은 코드가 실행되지는 않습니다. C ++는 자동으로 복사 생성자를 생성하므로 할당을 수행 할 때 실행되는 작업을 제어 할 수 없습니다.
- 많은 디버깅이 함수 이름이 망가지지 않기 때문에 더 쉬울 수 있습니다.
- 일반적으로 C에서 memcpy 를 사용하는 것은 괜찮지 만 복사 생성자가 실행되지 않기 때문에 C ++에서는 쉽게 문제를 일으킬 수 있습니다. 그쪽으로 t memcpy 는 std :: copy
그게 중요합니다.
그 외에도 C 사고 방식을 사용하는 데는 여러 가지 이점이 있습니다. C ++에서 나는 종종 지나치게 일반화되고 추상적으로 만드는 것을 발견합니다. C에서는 일반적으로 get-set 메서드와 같은 것을 잘라 내고 동적 배열을 사용하는 대신 고정 크기 배열을 미리 할당하는 경우가 많습니다. 종종 C에서 더 짧고 더 쉽게 디버깅되는 코드로 끝납니다. 데이터 구조는 일반적으로 디버거에서 더 평평하고보기 쉽습니다.
공정하기 위해 저는 C로만 앱을 만들지 않습니다. 그 이유는 C를 잘 보완 할 수있는 Lua와 같은 더 높은 수준의 언어와 결합하면 작동합니다. C가 그다지 강력하지 않은 경우
Id 소프트웨어는 대부분의 엔진을 CI에 작성합니다. Return to castle Wolfenstein 은 C로 작성되었습니다.
C 대 C ++의 확장 성 및 일반 배열과 비교 한 STL 벡터의 단점
설명
Answer
다른 사람이 지적했듯이 C ++는 당신이 설 수있는 큰 어깨 (BOOST, STL 등)의 이점을 제공합니다. 결국 개인 선택이지만 사용 가능한 리소스 때문에 C ++를 선택합니다. C ++에 사용하고 싶지 않은 기능이 있으면 사용하지 마십시오.
댓글
답변
동의합니다. ” 요즘은 누구나 C를 독점적으로 사용한다고 생각합니다. 일반적으로 더 높은 수준의 언어와 함께 사용됩니다.
C 프로그래밍은 C ++ 프로그래밍에 비해 몇 가지 이점이 있습니다. C ++는 사용자에게 보이지 않는 많은 작업을 내부적으로 수행 할 수 수 있으며 주의하지 않으면 성능을 저하시킬 수 있습니다. C ++는 또한 끔찍한 작업을 수행 할 수 있습니다 . 캐시 사용으로 인해 성능이 다시 저하 될 수 있습니다.
따라서 기존의 C ++ 방식이 아닌 C와 유사한 방식으로 게임의 성능에 중요한 부분을 작성하면 몇 가지 이점을 얻을 수 있습니다. 하지만 최근 몇 년 동안 실제로 전체 게임을 C로 작성하는 사람은 들어 본 적이 없습니다.
iPhone과 같은 일부 플랫폼에서 C ++를 사용하면 특정 킬로바이트 단위로 실행 파일 크기를 늘릴 수 있습니다. 이것은 일부 iPhone 개발자가 C와 Objective-C를 혼합하여 코드를 작성하는 이유입니다.
Answer
오늘날 C ++ 대신 C로 게임 엔진을 작성하는 것이 비합리적인 이유를 몇 가지 더 알려 드리겠습니다. STL과 BOOST입니다.
어떻게 될지 상상할 수 없습니다. 또 다른 list
구현을 작성할 가치가 있습니다. 즉시 사용할 수있는 (그리고 작성할 필요가없는) 코드에 의존 할 수있는 경우
댓글
Answer
C로 게임 엔진을 작성하는 것은 합리적입니다. 빠르고 여러 시스템으로 이식 할 수 있습니다. 예를 들어 Android 용으로 사용할 수 있습니다 (NDK 사용). iPhone 용으로 사용할 수 있습니다 (Objective c는 c의 확장입니다). 또한 다음을 사용할 수 있습니다. Linux, Mac 또는 Windows와 같은 주요 OS 용입니다. c에 익숙하다면 시도해보세요!
Answer
물론 합리적입니다. 저는 개인적으로 그렇게하지 않을 것입니다. 제가 아는 대부분의 C 팬은 실제로 .cpp 파일에 C와 유사한 코드를 작성합니다. 그러나 언어는 실제로 중요하지 않은 곳과 유사합니다.
누군가가이 작업을 선택하는 이유는 대부분 안티 C ++ 철학 때문이라고 생각합니다. 개인적으로 여전히 이것이 “C 스타일 C ++”보다 C를 선택하는 좋은 이유라고 생각하지 않습니다. typedef struct craziness는 C를 피할 수있는 충분한 이유이며 다른 많은 것들이 있습니다.
안타깝게도 C와 C ++는 둘 다 꽤 끔찍한 언어입니다. 이것이 사람들이 최근 몇 년 동안 스크립트에서 많은 코드를 작성하려고 시도한 이유 중 하나입니다.
C에서 일하는 사람들의 예를 찾고 있다면, 그들이 오래 전에 C를 포기했다는 것을 읽은 것을 기억하므로 id를 무시할 수 있습니다. Cryptic Studios (Star Trek Online)는 모든 엔진 개발을 C로 수행합니다. 내가 말할 수있는 한, 예, 그것은 명백한 이점보다는 철학 때문입니다.
답변
예 그리고 아니오 예 몇 년 전부터 해봤지만 멍청한 터미널에있는 플레이어와 함께 유닉스 (리눅스가 아님) 64 비트 원격 서버에서 3D로 실행되는 게임이 필요했습니다. LUA를 통합하고 싶지만 결국 C ++에서 작동하도록 lua를 얻게되었으므로 가능하지만하지 마십시오.
Answer
가능한 좋은 대답은”둘 다 사용 “이 될 수 있습니까?
panda3d 프로젝트를 최적화 할 수 있다고 들었으므로 cython을 사용하거나 해당 부분을 다시 코딩하여 병목 현상을 없앨 수 있습니다.
대부분의 경우 최적화가 필요한 부분은 반복과 중첩이 많은 부분이거나 숫자 계산이 많은 부분입니다. 그래서 내 (정당한) 타협은 두 언어를 모두 사용하는 것입니다. , 저수준 프로그래밍이 많이 포함 된 부분에 C를 사용하므로 y 속도가 필요한 부분에는 C ++ 언어를 오용하고 게임의 나머지 부분에는 C ++를 사용합니다.
이상적으로는 높은 수준을 염두에두고 엔진의 빠른 부분을 수행 한 다음 네스트 / 루프를 훨씬 적게 사용하는 스크립팅 언어 또는 C ++.
물론 특별한 게임을 위해 엔진을 사용하는 경우를 제외하고는 개발자가 수행해야하는 모든 게임에 적합한 엔진을 만들 수 없습니다. 일종의 게임 …
하지만 저는 경험이 많은 게임 개발자도 아니고 경험이 많은 개발자도 아니기 때문에 제 조언을 당연하게 받아들이지 마십시오. C는 글을 쓰는 동안 빠른 코드를 작성하도록 강요합니다. 게임만큼 큰 프로젝트를위한 좋고 빠른 C ++ 코드는 다릅니다 …
Answer
답변
C 코드는 일반적으로 유효한 C ++ 코드입니다.
C ++의 주요 문제는이를 잘못 사용하는 것입니다 ( Linus Torvalds는 이러한 이유로이를 싫어합니다 , 그는 또한 라이브러리 이식성에 대한 몇 가지 다른 문제가 있었기 때문에 그는 운영 체제 수준에서 작업하고 있으며 모든 임의의 칩에서 작업을 실행할 수 있어야합니다.
예를 들어 c ++ std :: vector <> (또는 유사한 컨테이너)보다 cstyle 배열 []을 사용하는 것에는 거의 이점이 없습니다.
벡터는 형식이 안전합니다. 경계를 검사 할 수 있습니다 (get () 또는 []를 사용하여 요소에 액세스 할 수 있습니다. 배열 검사 메서드를 사용하지 않더라도 포인터를 사용하지 않고 크기를 쿼리 할 수 있습니다.)
하지만 벡터는 예를 들어 기본 크기를 선언하지 않으면 느려질 수 있습니다 . 건설자. 또한 벡터에 항목을 추가하면 크기 조정이 필요한 경우 속도가 느려질 수 있습니다. C ++ 11은 균일 한 초기화 (이제 동일한 구문을 사용하여 벡터를 선언하고 초기화 할 수 있음)와 같은 많은 이점을 추가하며 복사를 방지 할 수있는 이동 생성자가 있습니다. 자신 만의 이니셜 라이저를 만들 수도 있습니다 (어떤 이유로 malloc을 사용하는 것 이외의 작업을 수행하려는 경우).
또는 크기를 조정해야하는 경우 벡터를 사용하는 것이 더 쉽습니다. , “malloc을 엉망으로 만들거나 수동으로 복사하는 등의 작업을 수행 할 필요가 없습니다.
C ++는 객체 지향 코드를 제공합니다. 컴파일 할 때”그것이 정말 간단하기 때문에 효율적일 것입니다. ” 코드로 작업하는 인간을위한 추상화입니다. 생성자와 같은 것들은 객체 생성 속도를 늦출 수 있습니다. 그러나 생성자가 기본값을 설정해야하거나 그렇지 않으면 생성자를 사용하지 않고 객체를 초기화 할 수 있습니다 (() ” ).
그러나 객체 지향은 프로그래밍 게임을 훨씬 쉽게 만듭니다. 게임은 종종 개체를 다룹니다.