2016-06-29 1 views
-6
void main() 
{ 
    int num, a=15; 
    num = ----a--; 
    cout<<num; 
    cout<<a; 
} 

私はそれを試してみました...私は紙の上、だって4を得るマイナス互いに相殺し、どのような残っていることはA--このコードの出力は何ですか?ここに何かがないのですか?

ですが、PC上で、私はだってコンパイルエラー取得する必要があります - - aの前に、コンパイラはこの '----'に前後のデクリメント演算子があると思ってオペランドを要求します。解決策は何ですか?正しいプログラムは、例えば、以下の方法を見ることができる

+4

解決策は、このような難読化されたコードを使用せず、あなたがしたいことを明確に表現することです。プログラミングはなぜ難しいのですか? – NathanOliver

+0

@ NathanOliver実際にはこれは正確に質問用紙に尋ねられたものです –

+2

なぜ '----'が互いに打ち消し合うのですか? '--'が減少するので、なぜ2つが減少し増分するのかわかりません。それとは別に、コンパイラエラーを取得するときは、正確なエラーを記述しないでください。 – chris

答えて

3

#include <iostream> 

int main() 
{ 
    int num, a = 15; 
    num = (----a)--; 

    std::cout << num << std::endl; 
    std::cout << a << std::endl; 

    return 0; 
} 

その出力は

13 
12 

後デクリメントオペレータがプリデクリメント演算子よりも高い優先度を有しており、その結果はrvalue変更することはできません。

この式は

----a-- 

----(a--) 

に相当し、コンパイルされません。

したがって、プログラムをコンパイルするには、かっこを使用する必要があります。

はCで事前デクリメント演算子も右辺値を返し、あなたは右辺値に演算子を適用されない場合がありますので、例えばとして、Cで書かれた対応するプログラム

#include <stdio.h> 

int main(void) 
{ 
    int num, a = 15; 
    num = (----a)--; 

    printf("%d\n", num); 
    printf("%d\n", a); 

    return 0; 
} 

がコンパイルされないことを考慮してください。

C++プログラムのみが有効です。

+0

しかし、事は無修正バージョン(どのタイプのタイプ)はまったく前年の試験で尋ねられたものです。プログラムの外は "コンパイルエラーのためにo/pを生成しません"と書かれていますか? –

+0

でも、前の年の試験で一度尋ねられたのは、変更されていないバージョン(何を入力したか)です。プログラムの外は "コンパイルエラーのためにo/pを生成しません"と書かれていますか? –

+1

@NiranjanDixitはい、元のコードはコンパイルされません。 –

関連する問題