2016-07-02 8 views
-2
void fun() 
{ 
// what should be the logic here to print x=20 instead of x=10 in the main function? 
} 
void main() 
{ 
int x=20; 
fun(); 
x=10; 
printf("%d",x); 
} 

これは私のクラステストの質問の1つでした。私は静的なintを使用するかどうかはわかりませんでした。Cインタビュー出力

+3

、 'メイン()' Cに 'int型メイン(無効)です'と 'int型のmain(int型のargc、char型** ARGV)'(または同等のための2人のだけ有効な署名、 'int main(int argc、char * argv [])')。私が考えることができる唯一のものは、おそらく彼らが何であるかではないでしょう(あるいは、おそらくそれが "主な機能"であると言います)、 'printf(" 20 \ n " );そして 'fun()'で 'exit(0);'を実行します。 – RastaJedi

+0

メインメソッドからのみ印刷する必要がありますか? – Kaushal28

+4

'fun()'と 'exit()'の中から20をプリントすることができます...テストで尋ねるのにまだ愚かな質問。 –

答えて

10

私はこの習慣を許しません。これは恐ろしい考えです。しかし、技術的には、これは質問の基準、一種のものです。

void fun() 
{ 
// Essentially this is a function with an empty body 
// And I don't care about() in a macro 
// Because this is evil, regardless 
#define printf(a, b) (printf)(a, b*2) 
} 

void main() // I know this is not a valid main() signature 
{ 
    int x = 20; 
    fun(); 
    x = 10; 
    printf("%d", x); 
} 
+0

Ha。私は奇妙な方法があることを知っていたはずです。 –

+0

OP(@Muthu)は知っています(これはvoid_ptrがすでにこれを知っているので確信しています)、これは 'fun()'に "logic"を入れません。 (前処理/マクロ展開は_前回のコンパイル時に起こります。つまり、これは技術的には 'main()'の "logic"のみを変更します)。 – RastaJedi

0

標準的な免責事項が適用されます。

アプローチ1:内部範囲に新しいx変数を作成します。

void fun() 
{ 
    #define fun() { int x 
    #define printf } printf 
} 

アプローチ2:xは常に20ことができるように10に変わり二変数を定義します。だけ知っているので

void fun() 
{ 
    #define x x=20,y 
}