C ++ 정의, 선언 및 과제는 정확히 무엇입니까?
-
21-08-2019 - |
문제
나는 정의, 선언 및 할당이라는 단어를 상호 교환 적으로 사용하는 경향이 있지만 이것은 일부 사람들에게 범죄를 일으키는 것 같습니다. 이것은 정당화 되었습니까? 변수에 처음 할당 할 때만 단어 선언 만 사용해야합니까? 아니면 그것보다 더 많은 것이 있습니까?
해결책
정의 및 선언은 비슷하지만 할당은 매우 다릅니다.
여기서는 변수를 선언 (또는 정의)하고 있습니다.
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);
}
함수 데칼리와 정의를 하나로 결합 할 수 있지만 기능이 프로그램의 어느 곳에서나 호출되기 전에 그렇게해야합니다.
일반적인 역할 :정의 = 선언 + 예약 공간.
정의, 선언 및 과제는 두 가지 경우가 있습니다.
- 변수의 경우.
- 기능을 위해.
을 위한 변수:
-- 정의:
컴파일러에 변수에 대한 메모리를 예약하도록 지시합니다.
int x;
-- 선언:
컴파일러에 변수가 다른 곳에서 정의되었음을 알리기 위해.
extern int x;
-- 과제:
컴파일러에 변수에 값을 넣도록 지시합니다.
x = 0;
을 위한 기능:
-- 정의:
int functionDef(int x){
int x;
...
...
...
return x;
}
-- 선언:기능의 프로토 타입 일뿐입니다.
int functionDef(int x);
정답은 당신이 말하는 언어에 따라 다릅니다. 컴퓨터 언어는 종종 언어 사양이나 언어를 중심으로 자란 커뮤니티 때문에 특정 용어를 가지고 있습니다. COBOL은 내가 그것을 사용할 때, 더 많은 주류 언어와는 다른 용어를 가졌습니다 (주류 비즈니스가 아니라 언어 개발의 주류에 더 가깝게 언어의 의미에서). 앞으로 이상한 용어가 발전했습니다.
영어를 알고 있다면, 일반적으로 단어가 정상적인 의미에서 무엇을 의미하는지에 대해 좋은 아이디어를 얻을 수 있지만 너무 많이 믿지 마십시오. 언어 나 언어 커뮤니티에서 특정 단어도 마찬가지입니다.
언어에 따라 다를 수 있습니다. 나는 그것이 단어가 수업과 같은 것들에 사용되는지에 달려 있다고 생각합니다. 여기에서 논의 된 대부분의 데이터 유형의 경우 질문이별로 관련이 없을 수 있습니다. C ++에서 (참조 C ++ - 정의와 선언의 차이점은 무엇입니까?), 클래스 또는 구조물은 항상 하나의 정의를 가지고 있지만 0 이상으로 선언 될 수 있습니다. 정의 없이는 클래스를 선언 할 수 없습니다. 따라서 "선언"은 "중고"와 동의어 일 수 있습니다.
대부분의 언어에서 정수와 같은 간단한 유형은 클래스와 같은 방식으로 정의가 필요하지 않습니다.