2013-04-25 13 views
20

私はCを絶対初心者に教えています。私は、生徒の中には同じ名前の関数と関数内のローカル変数を使用するという考えを持っていることに気付きました。私はそれがグーフィーだと思うと再帰を防ぐだろう。ここでCローカル変数は関数と同じ名前です - どのように動作しますか?

は例です:私はそれがどのように動作するかを理解する

int add2numbers (int a, int b) { /* Tested on Mac OS X with gcc */ 
    int add2numbers = a + b; 
    return add2numbers; 
} 

方法は、変数、関数のローカルスコープであり、かつ機能がグローバルスコープにあることです。

だから、質問は...

  1. 私はこれを正しく理解していますか?
  2. ここでh ***はそのアイデアを得ていますか?

おかげ

+9

+1決してそれについて考えなかった!! XD –

+5

1)正しいですか? 2)パスカル? –

+3

関数と同じ名前の変数に代入するのは、パスカルとベーシックで値を返す方法ではありませんか? –

答えて

0

1) Am I understanding this correctly?

ほとんど。

2) Where the h*** are they getting that idea from???

SOの建設的な質問ではありません。

+1

(2)に同意します。欲求不満の表情ではありません。ありがとう。 –

4

パスカル:)パスカルで

シンプルな機能:あなたは関数はグローバルであり、変数がローカルであると仮定して正しい

function max(num1, num2: integer): integer; 
    var 
    (* local variable declaration *) 
    result: integer; 
begin 
    if (num1 > num2) then 
     result := num1 
    else 
     result := num2; 
    max := result; 
end; 
+3

ああ、理由のために忘れてしまったこと。どのような醜い言葉。 +1 –

+0

ありがとう!今私の質問(それは本当に質問ではありません)h ***はプログラマーではないパスカルを学ぶのですか? –

11

。それがあなたのプログラムに矛盾がない理由です。

は今、このプログラムに機能x()、変数xの両方がグローバルであるため、あなたがエラーを取得します

#include<stdio.h> 
int x=10; 
void x() 
{ 
    printf("\n%d",x); 
} 

int main() 
{ 

    x(); 
    return 0; 
} 

、下記のプログラムを検討してください。

+1

正確です。しかし、関数x()の中でローカル変数を宣言すると、ローカル変数はグローバルスコープ内の何かを「隠す」でしょう。コメントありがとう。 –

+0

私は、ローカル変数と関数に同じ名前を使用しました。 gccはそれを許容しません。エラー: 'error:called object 'name'は関数または関数ポインタではありません。\ n注:ここで宣言してローカル変数を指しています。エラーは、私がその関数を呼び出すと表示されます。あなたの答えは完全に真実ではありません。それは他のコンパイラによって許容されるかもしれません。 –

関連する問題