sizeof 연산자의 대상은 변수명이 좋을까요? 아니면 타입명이 좋을까요?

ktd2004의 이미지

sizeof 연산자를 다음과 같이 사용할 수 있다고 알고 있습니다.

    int a, b;
    printf("sizeof a : %d\n", sizeof(a));      /* 1번 방법 */
    printf("sizeof b : %d\n", sizeof(int));    /* 2번 방법 */

여러분은 어떤 방법을 선호하시는지요?

제가 생각해 본 결과는 다음과 같습니다.
1. sizeof 연산자의 대상으로 변수명을 사용할 경우.
단점 : 변수가 배열형태로 변경될 경우에 문제가 될 수 있다.

2. sizeof 연산자의 대상으로 타입명을 사용할 경우.
단점 : 해당 변수의 타입이 변경될 경우에 문제가 될 수 있다.

어느 한 방법이 무조건 옳다라고는 말을 못할 것 같습니다.
어떤 방법이 더 좋을까요? 어떤 방법을 주로 사용하시나요?

chadr의 이미지

저의 경우에는 단일변수가 배열로 바뀌는 경우보다 타입이 바뀌는 경우가 더 많아서
sizeof에는 변수의 이름으로 사용합니다.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

pynoos의 이미지

부득이한 경우를 제외하고는 항상 변수명을 사용합니다.
심지어, 단항연산자의 이점을 최대한 살려서 ( ) 도 쓰지 않습니다.
저의 경우 ()를 쓸 때는 그것이 type일때 뿐입니다.

익명사용자의 이미지

int val;

sizeof val; // ok
siveof int; // error!

저래서 웬지 일관성이 없어 보이더군요....

(혹시 모르시는 분 있으실까봐... type명일때 괄호는 필수입니다. 변수명일때는 선택...)

ktd2004의 이미지

이 문제를 생각하게된 계기가 다음과 같은 코드때문입니다.

    /* 변경전 =================== */
    struct tttt a;
    ...
    write( fd, &a, sizeof(a));
 
    /* 변경후 =================== */
    struct tttt a[CHANNEL];    /* 배열로 변경 */
    ...
    write( fd, &a[0], sizeof(a));    /* 문제발생 */

위 코드를 변경한 후, 한참을 문제를 찾았습니다.
두가지 방법이 모두 장/단점이 있으니 고민이 되더군요.
정답은 없는 것 같아서, 많은 분들이 사용하고 계신 방법을 사용하려고 글을 올리게 되었습니다.

[여담]
pynoos님 잘 지내시고 계시죠. 저 tdkim입니다.
한동안 TSVN의 commit 로그에 보이지 않으시더군요.. ^^;
날씨가 더운데 건강 조심하십시오. (대한민국 파이팅)

pynoos의 이미지

write( fd, &a[0], sizeof(a));

이것도

write( fd, &a[0], sizeof(a[0]));

으로 바꾸셨으면, 문제가 발생하지 않았을텐데요.. ;)

p.s.
얼마전 커밋이 안되는 일이 있은 이후로 다시 시도 하지 않아서 안올렸네요. ^^;
그리고 요즘 쉬는 시간에는 블로그 API 플러긴 만드느라 정신 없습니다. ;)

antibug의 이미지

저도 변수명을 사용합니다.
타입을 사용하는 경우는...

printf( "sizeof(int)=%d\n", sizeof(int) );

따위의 경우 밖에 없죠.
예로 드신 경우는... 한참 봤습니다만, pynoos님의 말씀대로

write( fd, &a[0], sizeof(a[0]) ) ;

로 하는게 맞는 것 같습니다. 의도에 따라서는

write( fp, a, sizeof(a) ) ;

이렇게 하는게 맞지 않을까 싶구요.
저는 종종 이런 식으로도 사용합니다.

fwrite( a, sizeof(a[0]), sizeof(a)/sizeof(a[0]), fp ) ;

많은 분들이 countof() 매크로를 사용하시는데,
전... 키보드가 기계식이라 그런지 몇자 더 치고 말아요. ^^;

----
재미없는 일은 하지 말자는 인간 쓰레기.
-.-;

--------------------------------------
재미없는 일은 하지 말자는 인간 쓰레기.
-.-;

익명사용자의 이미지

기능상으론 sizeof(a)가 좋아보이는데
모양상 보기좋아서 sizeof(int)라고 사용합니다.

댓글 달기

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