Разница между #Define и Float? - PullRequest
5 голосов
/ 05 марта 2011

Какая разница между скажем, делающим это?

#define NUMBER 10

и

float number = 10;

При каких обстоятельствах я должен использовать один поверх другого?

Ответы [ 3 ]

14 голосов
/ 05 марта 2011
#define NUMBER 10

Создает замену строки, которая будет выполняться препроцессором (т.е. во время компиляции).

float number = 10;

Создает число с плавающей точкой в ​​сегменте данных вашего двоичного файла и инициализирует его как 10Т.е. он будет иметь адрес и быть изменяемым.

Таким образом, запись

float a = NUMBER;

будет такой же, как запись

float a = 10;

, тогда как запись

float a = number;

создаст доступ к памяти.

4 голосов
/ 05 марта 2011

Как говорит Филипп, форма #define создает замену в вашем коде на этапе предварительной обработки перед компиляцией.Поскольку #define не является такой же переменной, как number, ваше определение жестко запекается в исполняемом файле во время компиляции.Это желательно, если то, что вы представляете, является действительно константой, которую не нужно вычислять или читать откуда-то во время выполнения и которая не изменяется во время выполнения.

#defines очень полезны дляделая ваш код более читабельным.Предположим, вы выполняли физические вычисления - вместо того, чтобы просто вставлять 0,98f в свой код везде, где вам нужно использовать константу гравитационного ускорения, вы можете определить ее только в одном месте, и это повысит читабельность вашего кода:

#define GRAV_CONSTANT 0.98f

...

float finalVelocity = beginVelocity + GRAV_CONSTANT * time;

РЕДАКТИРОВАТЬ Удивлен, что вернулся и нашел мой ответ и увидел, что я не упомянул, почему вы не должны использовать #define.

Как правило, вы хотите избежать #define и использоватьконстанты, которые являются фактическими типами, потому что #define s не имеют области видимости, а типы полезны как для IDE, так и для компиляторов.

См. также этот вопрос и принятый ответ: Каков наилучший способсоздать константы в Objective-C

0 голосов
/ 05 марта 2011

"# Define" на самом деле является макросом препроцессора, который запускается перед запуском программы и действителен для всей программы

Float - это тип данных, определенный внутри программы / блока и действительный только внутри программы/ блок.

...