프로그래밍 언어/C++

C와 C ++ 모두에서 유효한 코드가 각 언어로 컴파일 될 때 다른 동작을 생성하는 방법

Rateye 2021. 6. 11. 11:16
728x90
반응형
질문 : C와 C ++ 모두에서 유효한 코드가 각 언어로 컴파일 될 때 다른 동작을 생성 할 수 있습니까?

C와 C ++에는 많은 차이가 있으며 모든 유효한 C 코드가 유효한 C ++ 코드는 아닙니다.
( "유효"란 정의 된 동작이있는 표준 코드를 의미합니다. 즉, 구현 특정 / 정의되지 않은 등이 아닙니다.)

C와 C ++ 모두에서 유효한 코드 조각이 각 언어의 표준 컴파일러로 컴파일 될 때 다른 동작을 생성하는 시나리오가 있습니까?

합리적이고 유용한 비교를하기 위해 (질문에서 명백한 허점을 찾으려하지 않고 실질적으로 유용한 것을 배우려고합니다) 다음과 같이 가정 해 보겠습니다.

  • 전처리 기와 관련된 것은 없습니다 (즉 #ifdef __cplusplus , pragma 등의 해킹이 없음을 의미합니다.)
  • 구현에 정의 된 모든 것은 두 언어에서 동일합니다 (예 : 숫자 제한 등).
  • 각 표준의 합리적으로 최신 버전을 비교하고 있습니다 (예 : C ++ 98 및 C90 이상).
    버전이 중요한 경우 각 버전이 다른 동작을 생성하는지 언급하십시오.
답변

C와 C ++에서 유효한 다음은 C와 C ++에서 i 에서 다른 값을 생성 할 가능성이 높습니다.

int i = sizeof('a'); 

차이점에 대한 설명은 C / C ++의 문자 크기 ( 'a')를 참조하십시오.

이 기사 에서 또 하나 :

#include <stdio.h>

int  sz = 80;

int main(void)
{
    struct sz { char c; };

    int val = sizeof(sz);      // sizeof(int) in C,
                               // sizeof(struct sz) in C++
    printf("%d\n", val);
    return 0;
}
출처 : https://stackoverflow.com/questions/12887700/can-code-that-is-valid-in-both-c-and-c-produce-different-behavior-when-compile
728x90
반응형