문제

나는 정의, 선언 및 할당이라는 단어를 상호 교환 적으로 사용하는 경향이 있지만 이것은 일부 사람들에게 범죄를 일으키는 것 같습니다. 이것은 정당화 되었습니까? 변수에 처음 할당 할 때만 단어 선언 만 사용해야합니까? 아니면 그것보다 더 많은 것이 있습니까?

도움이 되었습니까?

해결책

정의 및 선언은 비슷하지만 할당은 매우 다릅니다.

여기서는 변수를 선언 (또는 정의)하고 있습니다.

int x;

여기에서는 해당 변수에 값을 할당하고 있습니다.

x = 0;

여기서 나는 한 가지 진술에서 두 가지를 모두 수행하고 있습니다.

int x = 0;

메모

모든 언어가 하나의 진술에서 선언 및 할당을 지원하는 것은 아닙니다.

T-SQL

declare x int;
set x = 0;

일부 언어는 선언시 변수에 값을 할당해야합니다. 이 요구 사항은 언어의 컴파일러 또는 통역사가 변수의 유형을 추론 할 수 있도록합니다.

파이썬

x = 0

다른 팁

정의는 값 또는 함수가 설명되는 곳입니다. 즉, 컴파일러 또는 프로그래머는 그것이 무엇인지 정확하게 알려줍니다.

int foo()
{
  return 1;
}

int var; // or, e.g. int var = 5; but this is clearer.

선언은 컴파일러 또는 프로그래머에게 함수 또는 변수가 존재한다는 것을 알려줍니다. 예를 들어

int foo();
extern int var;

할당은 변수에 값 세트가 있고 일반적으로 = 연산자와 함께 할 때입니다. 예를 들어

a = b;
a = foo();

올바른 용어를 사용하는 것이 중요합니다. 그렇지 않으면 사람들은 자신이 말하는 것을 알지 못하거나 자신이 무슨 말을하는지 모른다고 잘못 가정합니다.

이 용어는 종종 다양한 언어 표준에서 정확한 의미를 갖습니다. 그렇다면 그들은 혼동해서는 안됩니다.

예를 들어 C에서 :

  • 함수 일 수 있습니다 한정된 한 번만 (당신이하는 일을 말할 때) 선언 그 전에 (어떤 주장이 필요한지, 어떤 유형이 반환되는지 말할 때).

  • 마찬가지로 변수는입니다 선언 어떤 유형인지 말할 때, 이것은 각 범위에 대해 한 번만 발생합니다. 그러나 당신은 할 수 있습니다 양수인 반복적으로 가치. (일부 언어도 구별됩니다 초기화 (선언 시간에 변수에 값을 부여) 및 과제 (나중에 가치 변경).)

차이점은 미묘하게 보일 수 있지만 중요합니다. 모든 언어가 동일한 차이를 만드는 것은 아니지만 C ++에서 변수 선언 변수의 유형과 이름을 컴파일러에 알려줍니다.

int i;

변수 정의 저장소를 할당하고 변수의 초기 값을 지정합니다.

i = 1;

일반적으로 수행되는대로 변수 선언과 정의를 하나의 진술로 결합 할 수 있습니다.

int x = 1;

함수 내부의 변수를 선언하면 변수에 대한 메모리를 따로 설정하므로 다음 코드는 암시 적으로 변수를 정의합니다. a 선언의 일부로.

int main()
{
    int a;
    return 0;
}

변수 이후 a 컴파일러에 의해 자동으로 정의되며, 할당 된 메모리 위치에있는 값이 포함되어 있습니다. 그렇기 때문에 알려진 값을 명시 적으로 할당 할 때까지 자동 변수를 사용하는 것이 안전하지 않은 이유입니다.

an 과제 프로그램의 변수 값을 변경할 때마다 발생합니다.

x = 2;
x++;
x += 4;

기능 선언, 변수 선언과 유사하게 함수를 컴파일러에 알려줍니다. 이를 통해 컴파일러 오류를 일으키지 않고 정의되기 전에 소스 코드에서 함수를 호출 할 수 있습니다.

int doSomething(float x);

함수 정의 반환 유형, 이름, 매개 변수 목록 및 함수에 대한 지침을 지정합니다. 이 요소 중 처음 세 가지는 함수 선언과 일치해야합니다. 함수는 주어진 프로그램에서 한 번만 정의해야합니다.

int doSomething(float x)
{
    if( x < 0 )
    {
        x = -x;
    }
    return static_cast<int>(x);
}

함수 데칼리와 정의를 하나로 결합 할 수 있지만 기능이 프로그램의 어느 곳에서나 호출되기 전에 그렇게해야합니다.

일반적인 역할 :정의 = 선언 + 예약 공간.

정의, 선언 및 과제는 두 가지 경우가 있습니다.

  1. 변수의 경우.
  2. 기능을 위해.

을 위한 변수:

-- 정의:
컴파일러에 변수에 대한 메모리를 예약하도록 지시합니다.

int x;

-- 선언:
컴파일러에 변수가 다른 곳에서 정의되었음을 알리기 위해.

extern int x;

-- 과제:
컴파일러에 변수에 값을 넣도록 지시합니다.

x = 0;

을 위한 기능:

-- 정의:

int functionDef(int x){
  int x;  
  ...  
  ...  
  ...  
  return x;  
}

-- 선언:기능의 프로토 타입 일뿐입니다.

int functionDef(int x);

정답은 당신이 말하는 언어에 따라 다릅니다. 컴퓨터 언어는 종종 언어 사양이나 언어를 중심으로 자란 커뮤니티 때문에 특정 용어를 가지고 있습니다. COBOL은 내가 그것을 사용할 때, 더 많은 주류 언어와는 다른 용어를 가졌습니다 (주류 비즈니스가 아니라 언어 개발의 주류에 더 가깝게 언어의 의미에서). 앞으로 이상한 용어가 발전했습니다.

영어를 알고 있다면, 일반적으로 단어가 정상적인 의미에서 무엇을 의미하는지에 대해 좋은 아이디어를 얻을 수 있지만 너무 많이 믿지 마십시오. 언어 나 언어 커뮤니티에서 특정 단어도 마찬가지입니다.

언어에 따라 다를 수 있습니다. 나는 그것이 단어가 수업과 같은 것들에 사용되는지에 달려 있다고 생각합니다. 여기에서 논의 된 대부분의 데이터 유형의 경우 질문이별로 관련이 없을 수 있습니다. C ++에서 (참조 C ++ - 정의와 선언의 차이점은 무엇입니까?), 클래스 또는 구조물은 항상 하나의 정의를 가지고 있지만 0 이상으로 선언 될 수 있습니다. 정의 없이는 클래스를 선언 할 수 없습니다. 따라서 "선언"은 "중고"와 동의어 일 수 있습니다.

대부분의 언어에서 정수와 같은 간단한 유형은 클래스와 같은 방식으로 정의가 필요하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top