Что такое определения, декларации и назначения С++?

Я имею тенденцию использовать слова define, declare и assign interchangeable, но это, кажется, вызывает обиду для некоторых людей. Это оправдано? Должен ли я использовать слово declare в первый раз, когда я назначаю переменную? Или это еще не так?

Ответы

Ответ 1

Определить и объявить аналогичны, но назначение очень отличается.

Здесь я объявляю (или определяю) переменную:

int x;

Здесь я присваиваю значение этой переменной:

x = 0;

Здесь я делаю оба в одном утверждении:

int x = 0;

Примечание

Не все объявления поддержки и назначения поддержки в одном выражении:

T-SQL

declare x int;
set x = 0;

Некоторые языки требуют, чтобы вы присваивали значение переменной при объявлении. Это требование позволяет компилятору или интерпретатору языка выводить тип переменной:

Python

x = 0

Ответ 2

Определение - это описание значения или функции, то есть компилятору или программисту сообщается точно, что это такое, например

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();

Ответ 3

Важно использовать правильную терминологию, иначе люди не будут знать, о чем вы говорите, или неправильно предполагаете, что не знаете, о чем говорите.

Ответ 4

Эти термины часто имеют точные значения в стандартах для разных языков. Если это так, их не следует путать.

В c, например:

  • функция может быть определена только один раз (когда вы говорите, что она делает), но она также может быть объявлена ​​до этого (когда вы говорите, какие аргументы она принимает и какой тип она возвращает).

  • Аналогично переменная объявляется, когда вы говорите, какой тип она есть, и это происходит только один раз для каждой области. Но вы можете назначить значение повторно. (Некоторые языки также различают инициализацию (дающую переменную значение во время объявления) и назначение (изменение значения позже).

Ответ 5

Различия могут казаться утонченными, но они важны. Не каждый язык делает те же различия, но в С++ объявление делает тип и имя переменной, известной компилятору

int i;

A определение переменной выделяет хранилище и задает начальное значение для переменной.

i = 1;

Вы можете объединить объявление переменной и определение в один оператор, как это обычно делается.

int x = 1;

Объявление переменной внутри функции также освобождает память для переменной, поэтому следующий код неявно определяет переменную a как часть ее объявления.

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

Так как переменная a автоматически определяется компилятором, она будет содержать любое значение в ячейке памяти, которая была выделена для него. Вот почему небезопасно использовать автоматические переменные, пока вы явно не присвоили им известное значение.

Назначение выполняется при каждом изменении значения переменной в вашей программе.

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

Объявление функции, аналогичное объявлению переменной, делает подпись функции известной компилятору. Это позволяет вам вызывать функцию в исходном коде до ее определения, не вызывая ошибки компилятора.

int doSomething(float x);

Определение функции указывает тип возвращаемого значения, имя, список параметров и инструкции для функции. Первые три из этих элементов должны соответствовать объявлению функции. Функция должна быть определена только один раз в заданной программе.

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

Вы можете объединить функцию decalartion и definition в одну, но вы должны сделать это, прежде чем функция будет вызвана в любом месте вашей программы.

Ответ 6

Определение, декларация и присвоение имеют два случая:

  • для переменных.
  • для функций.

Для Переменная:

- Определение:
Чтобы сообщить компилятору зарезервировать память для переменной.

int x;

- Замедление:
Чтобы сообщить компилятору, что переменная определена в другом месте.

extern int x;

- Назначение:
Чтобы сообщить компилятору поместить значение в переменную.

x = 0;

Для Функции:

- Определение:

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

- Замедление:
Это просто прототип функции.

    int functionDef(int x);

Ответ 7

Правильный ответ зависит от того, на каком языке вы говорите. Компьютерные языки часто имеют определенную терминологию либо из-за спецификации языка, либо из сообщества, выросшего вокруг языка. COBOL, когда я его использовал, имел совершенно другую терминологию, чем другие основные языки (в смысле языков, которые ближе к основному развитию языка, а не к основному бизнесу). Форт разработал какую-то странную терминологию.

Если вы знаете английский, вы обычно можете получить представление о том, что означает слово из его нормального значения, но никогда не рассчитывайте на это слишком много. То же самое происходит с конкретными словами между языками или языковыми сообществами.

Ответ 8

Это может зависеть от языка, как было сказано. Я думаю, что это действительно зависит от того, используются ли слова для таких вещей, как классы. Для большинства типов данных, обсуждаемых здесь, вопрос может не иметь большого значения. В С++ (см. С++ - в чем разница между определением и объявлением?), класс или структура всегда имеют точно одно определение, но могут быть объявлены ноль или более раз, Класс не может быть объявлен без определения. Таким образом, "объявленный" может быть синонимом "используется".

В большинстве языков простые типы, такие как целые, не нуждаются в определениях так, как это делают классы.