C에서 사용자정의 자료형을 만들수 없다는게 맞나요?

u235의 이미지

8051 계열중
char chr[5]; 배열에서
이 5바이트에 대해 >> 연산이 필요 합니다.

흔히들 하나씩 처리하면 되지 않냐고들 하지만 LSB가 다음요소의 MSB로 전달이 안되는 문제를 간과한 발상이지요.
이문제를 해결하기 위해서는 5바이트를 하나의 자료형처럼 사용하는 사용자 정의 자료형을 선언하면 되겠으나
C에서는 아쉽게도 이를 지원하지 않는다네요.
물론 구조체(공용체) 역시 기본 자료형을 규합한 복합 자료형이지 사용자정의 자료형은 아닙니다.

복잡하지만 5바이트를 새 자료형으로 typedef 하는방법은 있다고 하는데요.
가능하신분은 작동원리를 부탁 드립니다.

참고로 8051계열의 최대 자료형은 long (4Byte)가 최대 입니다.

익명 사용자의 이미지

5바이트짜리 자료형을 만드는 방법은 구조체나 배열의 typedef를 이용하면 없진 않으나, 어차피 대입 연산자나 쉬프트 연산자의 피연산자로 사용할 수가 없으므로
아무 의미가 없습니다. C++이라 해도, 연산자 오버로딩이 가능하다는 점을 빼면 이점에 있어서는 큰 차이가 없습니다.

결국 내부 동작을 직접 구현하셔야 하는건 무슨 언어로 하든 마찬가지입니다.

1이나 2, 또는 4바이트 단위로 처리를 하되, LSB에서 MSB로 넘어가는건 프로그래머가 알아서 '잘' 처리하는 수밖에는 없습니다.

참고로 5바이트의 자료형 만드는 방법은 다음과 같습니다.

typedef char pentabyte[5];

그러나 어차피 배열이므로 쉬프트 연산자는 커녕 대입조차 안됩니다.

klara의 이미지

내장되지 않은 타입에 대해서 연산자를 알아서 정의해주는 언어가 존재하기나 하나요?
자동으로 시프트 연산이 적용되지 않으므로 사용자 정의 자료형을 만들수 없다는건 억지같은데요.

익명 사용자의 이미지

"참고로 5바이트의 자료형 만드는 방법은 다음과 같습니다."

익명 사용자의 이미지

저한테 태클거는 건줄 알았는데 질문자한테 말하는 내용일수도 있겠네요.
질문자한테 하는 말이라면 죄송합니다. 제가 좀 신경질적으로 반응한 것 같네요.

u235의 이미지

5개의 char 배열은 어떤 사칙연산도 가
능하지 않으므로
단지 배열을 리네임 한것일뿐 완전한 사용자정의 자료형이 아닙니다.

구조체형도 흔히들 사용자 자료형으로 부르기도 하나
엄밀히 말해 기본 자료형만을 조합한 조합 자료형일뿐 사용자 정의 자료형이라 하는건 번역 오류가 아닐까 합니다.

James Gostling

댓글 달기

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