[질문] int64 형 선언하는 방법 좀 알려주세요.

naisr00t의 이미지

윈도우에서 MFC 코드 중에 __int64 형이 있습니다.

리눅스에서는 없을 까요?
아울러 있으면 쓰는 방법 좀.. 비스무레한 것을 찾았는데, 전혀 안 먹히네요..

그럼 고수님들 부탁드릴께요...

버려진의 이미지

long long int

음.. vc에 visual assist가 있다면 vc에서 __int64를 쓰고 정의를 바로 볼 수 있습니다.

vc설치가 안되어 있어서 윈도에서는 어떻게 정의되어 있나 모르겠네요. :)

cdpark의 이미지

64bit 정수형을 쓰시려면 <stdint.h> 를 부른 후에 int64_t 를 쓰면 됩니다.

최종호의 이미지

#include <inttypes.h>

main()
{
        int64_t i;
}

아마 IPL32 에서는 long long으로,
LP64 에서는 long 으로 typedef 되어있을 듯 합니다.

<inttypes.h> 는 C 표준에 정의되어 있는 헤더파일이며
<inttypes.h> 가 include 하는 <stdint.h> 파일에
implementation에서 지원하는 integer width에 대한 typdef 를 제공하도록 되어있습니다. (SHOULD)

전웅의 이미지

naisr00t wrote:
윈도우에서 MFC 코드 중에 __int64 형이 있습니다.

리눅스에서는 없을 까요?
아울러 있으면 쓰는 방법 좀.. 비스무레한 것을 찾았는데, 전혀 안 먹히네요..

그럼 고수님들 부탁드릴께요...

C99 의 int64_t 는 optional 입니다.

정말로 padding bit 없고 음수 표현에 two's complement 를 사용하는
정확히 64 bits 짜리 정수형이 필요하신지요? 그런 것이 아니라면
long long int 로 충분합니다.

--
Jun, Woong (woong at gmail.com)
http://www.woong.org

최종호의 이미지

전웅 wrote:
naisr00t wrote:
윈도우에서 MFC 코드 중에 __int64 형이 있습니다.

리눅스에서는 없을 까요?
아울러 있으면 쓰는 방법 좀.. 비스무레한 것을 찾았는데, 전혀 안 먹히네요..

그럼 고수님들 부탁드릴께요...

C99 의 int64_t 는 optional 입니다.

정말로 padding bit 없고 음수 표현에 two's complement 를 사용하는
정확히 64 bits 짜리 정수형이 필요하신지요? 그런 것이 아니라면
long long int 로 충분합니다.

7.18 절

Quote:

4 For each type described herein that the implementation provides,215) <stdint.h> shall
declare that typedef name and define the associated macros. Conversely, for each type
described herein that the implementation does not provide, <stdint.h> shall not
declare that typedef name nor shall it define the associated macros. An implementation
shall provide those types described as ‘‘required’’, but need not provide any of the others
(described as ‘‘optional’’).

7.18.1.1 절

Quote:

3 These types are optional. However, if an implementation provides integer types with
widths of 8, 16, 32, or 64 bits, it shall define the corresponding typedef names.

음.. 제가 SHALL을 SHOULD로 잘못 봤군요.
7.18.1.1 의 However 로 시작하는 절이 혼란을 일으킬 수 있는데,
'optional이긴 하지만 intN_t 가 정의되어 있으면 해당 N bit 정수형을 정의한다' 로 볼 수도 있겠고,
'optional이긴 하지만 구현에서 N bit width의 정수형을 제공한다면 해당하는 intN_t 를 정의해야 한다.' 로 볼 수도 있을것 같은데요.
특히, (스펙에서는 명시하고 있지 않지만) SHALL을 RFC 2119 의 requirements level 키워드로 해석한다면
후자의 해석이 맞을 듯 한데 이렇다면 optional이라는 것이 의미없어지고,
7.18 절을 따르면 의미적으로는 전자일 듯 하네요. :?

전웅의 이미지

최종호 wrote:
음.. 제가 SHALL을 SHOULD로 잘못 봤군요.
7.18.1.1 의 However 로 시작하는 절이 혼란을 일으킬 수 있는데,
'optional이긴 하지만 intN_t 가 정의되어 있으면 해당 N bit 정수형을 정의한다' 로 볼 수도 있겠고,
'optional이긴 하지만 구현에서 N bit width의 정수형을 제공한다면 해당하는 intN_t 를 정의해야 한다.' 로 볼 수도 있을것 같은데요.
특히, (스펙에서는 명시하고 있지 않지만) SHALL을 RFC 2119 의 requirements level 키워드로 해석한다면
후자의 해석이 맞을 듯 한데 이렇다면 optional이라는 것이 의미없어지고,
7.18 절을 따르면 의미적으로는 전자일 듯 하네요.

흠.. 제가 말씀을 잘 이해 못하는 것인지도 모르겠습니다만, 어느 쪽으로
하든 결국 optional 아닌지요? ^^

올바른 해석은 (아마도 후자인)

"implementation 이 N bit width 에 padding bit 가 없고, (signed 의
경우) 음수 표현에 2's complement 를 사용하는 정수형을 가지고 있는
경우, 반드시 (u)intN_t 를 정의해야 한다. (단, N 은 8, 16, 32, 64)"

입니다. 즉, implementation 이 해당 요구를 만족하는 type 을 가지고 있지
않은 경우 intN_t 는 제공되지 않을 수도 있습니다. 굳이 없는 정수형을
편의 제공 차원에서 만들어 제공할 수도 있겠지만, <stdint.h> 의 기본적인
의도가 확장으로 제공되는 특정한 특성을 갖는 정수형에 대해 접근할 수
있는 표준적인 방법을 제공하자는 것임을 고려할 때, 구현이 먼저고
typedef 명 제공이 나중임을 알 수 있습니다.

(u)intN_t 와 관련된 한 가지 문제점은 사용자가 정말

- "정확히" N bit width 를 갖고
- padding bit 가 없고
- (signed 의 경우) 2's complement 사용

를 만족하는 type 이 필요한지 다시 생각할 기회를 주지 않는다는
것입니다. 즉, (u)intN_t 를 남용할 경우 쓸데 없이 프로그램의 이식성을
제한하는 결과를 낳게 됩니다.

그래서, 관례를 엎고, 위 조건을 만족하는 정수형을 (u)int_exactN_t
정도로 정의하고, 현재의 (u)int_leastN_t 를 (u)intN_t 로 정의하자는
주장도 있었습니다.

일부러 이식성을 얻기는 어려운데 일부러 이식성을 버리기는 너무 쉬운 것
같습니다.

그럼...

--
Jun, Woong (woong at gmail.com)
http://www.woong.org

댓글 달기

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