>  기사  >  백엔드 개발  >  귀하의 C/C 코드가 부당한 가정을 하고 있습니까?

귀하의 C/C 코드가 부당한 가정을 하고 있습니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-31 04:22:31414검색

 Is Your C/C   Code Making Unwarranted Assumptions?

C/C에서 부당한 가정 시연

이 교육 도구를 어떻게 개선할 수 있나요?

이 도구를 사용하려면 다음 제안 사항을 고려하세요.

  • 조건부 컴파일 통합: 조건부 컴파일을 사용하여 특정 플랫폼 특성을 기반으로 가정을 테스트하세요. 예를 들어, 테스트 프로그램이 특정 플랫폼 종속 기능에 의존하는 경우 #ifdef 또는 #if __GNUC__를 사용하여 테스트를 다양한 컴파일러 환경에 맞게 조정할 수 있습니다.
  • 테스트 사례를 확장하세요. 프로그래머가 설정한 보다 일반적인 가정을 다루기 위해 더욱 다양한 테스트 사례를 포함합니다. 예는 다음과 같습니다:

    • "부동 소수점 산술은 결합적입니다."
    • "공극*의 크기는 주소를 지정할 수 있는 가장 작은 단위의 크기와 같습니다."
    • "음수의 부호는 항상 -입니다."
  • 테스트 자동화: 테스트를 실행하고 결과를 수집하는 스크립트 또는 자동화 도구를 만듭니다. 다양한 플랫폼. 이렇게 하면 테스트 프로세스가 간소화되고 플랫폼 차이에 대한 데이터베이스를 더 쉽게 유지 관리할 수 있습니다.

어떤 테스트가 좋을 것이며 어떤 테스트가 되어야 할까요?

1. 문자 가정:

  • 테스트: 모든 플랫폼에서 'A' == 65인지 확인합니다.
  • 코드:

    <code class="c">EXPECT("00 we have ASCII",('A'==65));</code>
  • 테스트: 'a' < 'A'는 유효합니다.
  • 코드:

    <code class="c">EXPECT("02 big letters come before small letters",('A'<'a'));
  • 테스트: 테스트 char의 크기가 항상 8비트인 경우.
  • 코드:

    <code class="c">EXPECT("04 a char is 8 bits",CHAR_BIT==8);

2. 정수 가정:

  • 테스트: 정수가 2의 보수 표현을 사용하고 순환한다는 가정이 유효한지 검사합니다.
  • 코드:

    <code class="c">EXPECT("06 integers are 2-complement and wrap around",(int_max+1)==(int_min));
  • 테스트: int의 크기가 a의 크기와 같다는 주장이 있는지 확인하세요. void*는 모든 플랫폼에서 true입니다.
  • 코드:

    <code class="c">EXPECT("05 int has the size of pointers",sizeof(int)==sizeof(void*));

3 . 포인터 가정:

  • 테스트: sizeof(void*)가 항상 sizeof(void(*)())보다 크거나 같은지 확인합니다.
  • 코드:

    <code class="c">EXPECT("10 void* can store function pointers",sizeof(void*)>=sizeof(void(*)()));</li>
    </ul>
    <p><strong>4. 실행 가정:</strong></p>
    <ul>
    <li>
    <strong>테스트:</strong> 스택이 항상 아래쪽으로 증가하는지 테스트합니다.</li>
    <li>
    <p><strong>코드:</strong></p>
    <blockquote><pre class="brush:php;toolbar:false"><code class="c">EXPECT("12 the stack grows downwards",check_grow(5,0)<0);</code>
  • 테스트: 표현식의 평가가 항상 왼쪽에서 오른쪽이라는 가정을 검토합니다.
  • 코드:

    <code class="c">EXPECT("00 we have ASCII",('A'==65));</code>

손에 닿을 수 있는 플랫폼에서 테스트를 진행하고 결과를 게시해 주실 수 있나요?

저희는 다양한 플랫폼에서 가정을 테스트하는 데 커뮤니티 참여를 장려합니다. 다음 정보와 함께 결과를 공유해 주세요.

  • 플랫폼 세부 정보(운영 체제, 컴파일러 버전, 아키텍처)
  • 예상 결과와 차이점이 있는 경우
  • 이유 차이가 발생할 수 있습니다(예: 컴파일러 최적화, 플랫폼별 구현)

위 내용은 귀하의 C/C 코드가 부당한 가정을 하고 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.