인터페이스"혼란

S

sawaak

Guest
안녕,
여기있는 프로그램입니다.
코드 :

메인 무효 ()

(

int = 10;

int b;b = ( - - );

B의 printf ( "값은 % d 개", b) 항;b = B를;

printf ( "B의 값은 %입니다 이제 d 개", b) 항;

)
 
안녕,
코드에서, 우리는 증가 2 prefixs이 있는지 그리고 하나의 게시물을 수정 증가에 대답그래서이 게시물을 수정을 기반으로 이후에 B에 할당된 값을 증가됩니다.그래서 B의 첫 번째 가치는 10 - 11 11 = 10.
이제 접미사로 인해 증가합니다.= 11.그래서 B의 새로운 가치를 21 일입니다.
안부,
ramana

 
said:

그것을 아래로 ramana_k22
무슨 사치이다 :
예를 들어
= 10, b = 0;
= "10 10 = 20 후 ; = 11;
= "11 11 일 이후 처음 다음 ;

 
네, 당신은 방정식의 설명을 통해 혼란 수있습니다.하지만 이것은 C 표준은 매우 심각한 문제의 예입니다, 그것을 일관성있는 표준을하지 않습니다.C 컴파일러의 작가를 사용할 수있습니다 그들만큼 코드 생성 순서와 동일한 우선 순위 수준에서 선택할 임의의 순서로 진술에 대한 코드를 생성하는 혜택을.

이는 최근 x = B를 C를위한 코드를 생성하는 컴파일러가 발생할 수있습니다or x = a (b c)x = ( b) 항 C를이나
X = (나 C를)이것은 사전 및 사후 감소 코드를 모두 지옥 같은 코드를 사용하여 프로그램에 함께가는 것을 의미합니다.손가락의 첫번째 규칙은 C 코드를 사용했을 때 - 코드를 생성하는 방법에 대한 명시적 지침은 컴파일러에게 플러스가 인간의 코드를 100 배 이상 우리에게 명시적으로 읽을 수있습니다 parenthises 사용할 수있습니다.결론은, 만약 당신이 그것을 모호하지 않은 방법을 배울 필요가 등의 모호한 코드를 작성합니다.

그것은 어떤 사람이 제로는 C 영하되지 않습니다 될 NULL을 가지고 같은 방식으로이야.국회 의사당 글씨 'define'd 상수 얘기해야합니다.그것은 가치가 C 컴파일러의 작가 잘못된 포인터가를 선택합니다.대부분의 C 컴파일러 구현을 위해, 그것을 0,하지만 몇 가지 구현을 위해, 그것을 제외하고 vestor 또는 할당되지 않은 포인터에 대한 함정 벡터 수있습니다.

수업까지 : 귀하의 코드를 모호 수시키지 않을, 당신은 그것을 모호하지 않은 만들 정도로 괄호를 사용할 수없습니다.그것은 당신의 경력 경로 대단히 도움이됩니다.

추신 - 만약 당신이 절대적으로 모든 주위에 괄호를 쓰지 않아요가 발생할 수있습니다 성명을 정의 미친 부작용이 나타납니다, 그리고 난 모든 걸 뜻.어떤 효과를 염두 - boggling있습니다.그것은 하나의 이유는 성명을 정의하는 이유 중 이예요 C에서 멸종 방법입니다 .컴파일러 및 중고 프로세서 공동 정말 필요 없어 아주 잘 함께 존재한다.

 
여기는 C와 같은 표준에 문제가있습니다.그것은 표현을 두 번 이상 시퀀스 포인트 사이에 변수를 수정할 수없습니다 밝혔습니다.

violates that rule, so the results are undefined (anything could happen).

성명 b = ( - - );
그 규칙을 위반하는, 그래서 결과가 일어날 수 (건) 정의되지 않은있습니다.귀하의 프로그램에서 같은 코드를 사용하려면, 버그, 설사 그렇다하더라도 당신이 예상 결과를 제공합니다.

모든 C 프로그래머 comp.lang.c FAQ를 참조해야합니다.그것은, 우리가 현재 주제에 대해 조언을 포함하여 우수로 가득한가.

<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="윙크" border="0" />http://c-faq.com/

내가 MinGW와 예제를 컴파일 터보 C.보다 더 현대적인 컴파일러를 사용하는 것이 좋습니다, 그 경고 메시지를, 우리가 현재 논의하는 등 여러 가지 버그를 식별 :

confusing.c : 2 : 경고 : '의 반환 형식을 기본'이다`int하지confusing.c : 함수에서`주 :confusing.c : 6 : 경고 : 작업이` '에서 정의되지 않은 수있습니다confusing.c : 6 : 경고 : 작업이` '에서 정의되지 않은 수있습니다confusing.c : 7 : 경고 : 함수의 암시적 선언`printf '
 
echo47 작성 :

여기는 C와 같은 표준에 문제가있습니다.
그것은 표현을 두 번 이상 시퀀스 포인트 사이에 변수를 수정할 수없습니다 밝혔습니다.
violates that rule, so the results are undefined (anything could happen).
성명 b = ( - - );
그 규칙을 위반하는, 그래서 결과가 일어날 수 (건) 정의되지 않은있습니다.
귀하의 프로그램에서 같은 코드를 사용하려면, 버그, 설사 그렇다하더라도 당신이 예상 결과를 제공합니다.모든 C 프로그래머 comp.lang.c FAQ를 참조해야합니다.
그것은, 우리가 현재 주제에 대해 조언을 포함하여 우수로 가득한가.
<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="윙크" border="0" />
[홈페이지] h ** P는 : / / c를 - faq.com / [/ URL이]내가 MinGW와 예제를 컴파일 터보 C.보다 더 현대적인 컴파일러를 사용하는 것이 좋습니다, 그 경고 메시지를, 우리가 현재 논의하는 등 여러 가지 버그를 식별 :confusing.c : 2 : 경고 : '의 반환 형식을 기본'이다`int하지
confusing.c : 함수에서`주 :
confusing.c : 6 : 경고 : 작업이` '에서 정의되지 않은 수있습니다
confusing.c : 6 : 경고 : 작업이` '에서 정의되지 않은 수있습니다
confusing.c : 7 : 경고 : 함수의 암시적 선언`printf '

 
안녕,

이 진술 B의 = ( - - );
''가치를 한 번 씩 증가되며, 접두사를 증가하기 때문에 하나의 시간과 가치를 감소 10 것입니다.10 postfix와 증가 연산자 때문에 가치에는 아무런 변화가 될 것입니다 위의 성명 ''11 일 예정의 가치를 처형했다.첫 번째 printf 지금의 값을 10 다음 printf 성명에서 'b의 값에 것입니다'21 것입니다.

 
aandavan, 그것은 컴파일러에 대한 그런식으로 행동하지만, 허용이 그것에 의존하지 않습니다.

.

은 C 표준 결과가 정의되지 않은
밝혔습니다.

 
안녕하세요 ech047,
내가 TurboC와 에픽 터보 C. 나도 같은 대답을 가지고 두 개의 컴파일러를 선택.그게 전부 내가 왜 모든 컴파일러와 동일한 결과를 생산할 것이라고 생각.하지만 그 대답을 다른 Keil.그래서 그 가치가있습니다 컴파일러에 따라 다릅니다 확인

 
sawaak 썼습니다 :

...
어떻게, 혼란 메신저 수있습니다

 
난 당신 MISRA 규칙에 따라 코드를 작성하는 것이 좋습니다.이것은 모터 업계의 노력이 모든 컴파일러와 함께 작동합니다 코드를 작성하는 것입니다.

 
MISRA 무엇입니까?만약 당신이 규칙 / IEC / ANSI C로 표준이 아닌 다른 어떤 설정, 그리고 어떤 컴파일러의 행동이 좋은 휴대용 C 코드, ISO에 따라 작성합니다.

C.

물론, 표준 C. 학습을위한
매우 좋지 않다

I discovered that MISRA (the Motor Industry Software Reliability Association) publishes "Guidelines for the Use of the C Language in Critical Systems".

업데이트 :

내가 MISRA (자동차 산업 소프트웨어 신뢰성 협회) "중요 시스템에서 C 언어를 사용하기 위해"안내서 발간을 발견했다.그 책은뿐 아니라 ISO 표준에 정의되어 누른 다음 일반적인 C 프로그래머의 실수를 피할 수 있도록 추가적인 요구 사항을 추가 C를 사용했다.그건 좋은 것 같군요!
echo47에 의해 2006년 10월 28일 6시 51분에 편집한 마지막으로, 1 시간을 편집한 총

 
U는 C 코드의 같은 종류의 사용해서는 안됩니다.집행 C 언어에서 정의되지 않는다.결과는 컴파일러는 컴파일러에서 varry 수있습니다.

 
괄호를 사용하여 .. 그건 U 쉽고 명확하게 그 사람에 대한 귀하의 코드를 .. 읽기 및 컴파일러로 만들 것이다!

U 다른 해답을 줄 것입니다 코드 .. 다른 컴파일러를 writting이 방법!

 
대답은 간단합니다

첫 번째 임무는 ...10 -11 11 10 제공

자 = 11와 B = 10
그래서, B 조 = 11 10 = 21

다시 컴파일러와 과정에 따라 다릅니다, 약간의 디버깅하기 어려운
프로그램과 같은 코딩을 사용하지 마십시오
괄호를 사용하여 분리

 
그건 좋은 생각이 귀하의 코드에 대한 정적 분석을해야, Gimpel 보풀 같은 것을 사용하고있습니다.Gimpel 또한뿐만 아니라 MISRA 확인 파일을 공급하고있습니다.당신은 정적 분석하여 감지할 수 얼마나 많은 버그를 놀라게 될거야!
자동차 업계, 소프트웨어 MISRA 준수하도록하고있다.
MISRA 유형에 대해 매우 까다로운입니다!

 

Welcome to EDABoard.com

Sponsor

Back
Top