if 조건문에서 &&시...

na7jun8gi의 이미지

C에서 if (condition1 && condition2)일때
condition1이 거짓이라면 condition2와는 상관없이 조건문을 나오는것 아닌지요?

어떤 다른 이유에 의해 condition2의 조건을 먼저 확인한다든지 condition1가 거짓이지만
condition2를 확인하는 경우가 있을까요?

의심할 여지없이 그런경우가 없다고 알고 있었는데...컴파일러나 다른 것에 의해 그렇게 되는
경우가 있지 않을까 하는 분들이 계셔서...

그런 경우가 있을까요?

아메스트리에우려먹은사골맹탕의 이미지

임베디드라면 그럴 지도 모릅니다.
고로 새로운 머신, 새로운 프레임웍을 만날 때마다 새로 매뉴얼 통독 하셔야죠. 매뉴얼에 없으면 직접 테스트.

na7jun8gi의 이미지

답변감사합니다~^^
그런데 혹시 임베디드에서 말씀해주신것처럼 사용되는곳 하나만이라도 소개해 주심 안될까요?
실제로 그렇게 사용되어진곳이 알고 싶습니다.

vacancy의 이미지


C언어에서는 short circuit evaluation이 표준일겁니다.

cinsk의 이미지

없습니다. 임베디드 용 C이든 뭐든.. 표준을 따르는 C 컴파일러라면, 그런 경우 없습니다.

--
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://www.cinsk.org/cfaqs/

아메스트리에우려먹은사골맹탕의 이미지

임베디드에서 그 표준이 종종 무시되는데, 굳이 따지자면 C-style api 가 C 처럼 제시되기 때문이죠.

neogeo의 이미지


어떤 임베디드 C 컴파일러나 환경에서 short circuit이 무시되는가요? 아직까지 본적이 없는데.... 혹시 예를 들어주실 수 있는 컴파일러나 환경이 있습니까?

Neogeo - Future is Now.

Neogeo - Future is Now.

vacancy의 이미지


그건 C언어라고 볼 수 없지요.

그리고 컴파일러 개발자 입장에서 short circuit이 어려운 기술이 아닙니다.
엄밀히 말하면 더 쉽죠. ( short circuit으로 안하려면 중간중간 결과를 저장해놔야합니다. )

임베디드에서 꽤 개발을 해봤지만, short circuit으로 구현되지 않은 컴파일러는 못봤습니다.

na7jun8gi의 이미지

답변주신 모든 분들께 감사드립니다.

그런데, short circuit이 무시되는 환경을 찾다가 Complete evaluation인 환경이나 컴파일러는 뭐가있을까라는
궁금이 생겼는데 해결하지 못했습니다.물론 전자도 찾지 못했습니다. ㅡ.ㅜ;

Complete evaluation가 적용되는 환경이나 컴파일러 아시는분 답변 좀 부탁드립니다.

ymir의 이미지

새로 언어를 디자인 하지 않는한에는 찾기 힘들 것 같네요.

http://stackoverflow.com/questions/1232603/do-all-programming-languages-have-boolean-short-circuit-evaluation

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

winner의 이미지

제가 알기로는 C 개발 초기에 ||, && 이 없었고, |, & 가 논리연산자로 쓰였다는군요.
그래서 우선순위를 늦춰놨고, 그로 인하여 지금 비트연산자로 쓰는데 괄호가 없으면 이상해진다는...

아메스트리에우려먹은사골맹탕의 이미지

저는 pro-c 익힌 사람하고 c 컴파일러 관련해서 논쟁하다가
스펙 문서 보고 역시 임베디드는 (기대를 배신)안 하는 게 없구나 싶어서(static 초기화라든가)
이런 걸 익히느니 맘 편하게 정통 C 나 파자, 한 사람이라서
수많은 임베디드용 컴파일러에 대한 warning mind 를 갖고 있습니다.
그래서 임베디드가 C 표준을 반드시 따를 거라는 얘기는 현실에 맞지 않다고 얘기하는 것입니다.
short circuit 관련해서도 있는지 없는지 모르지만,
섣불리 재단하지 말고 직접 확인해 두는 것이 안전하다는 취지의 글을 쓴 것인데,
제가 반례의 경우를 알고 있다며 글을 쓴 것으로 비춰진 모양인가 보군요..

(그러니까, 임베디드는 하드웨어 때문에 C 비스무리한 컴파일러를 만들어서 이리저리 비틀어 논 걸 보자니 짜증나서 아직까진 PC 용만 사용하고 있습니다.)

댓글 달기

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