я могу разобрать только сходство, а не различия ....В чем разница между символической константой и макросом в C?
ответ
Макрос принимает аргументы и (обычно) генерирует фактический код, A помощью #define: д константа является лишь значение:
Например :
#define MAX_NAME_LENGTH 32
против
#define MAX(a, b) ((a) > (b) ? (a) : (b))
конечно, это часто лучше использовать фактические константы языка на уровне, когда это возможно:
enum {
MAX_NAME_LENGTH = 32
}
или
const size_t MAX_NAME_LENGTH = 32;
Они обеспечивают лучшую проверяемость, часто лучше работать с отладчиками (так как они правильные символы первого уровня), а не полагаться на методах текста замещения.
Константы в C (вы просили об этом) - это числовые константы (0, 1, 0x0, 0,1, 1.E-10, ...), константы интегральных символов ('a', '\ n', L 'A', ...) и констант перечисления (типа int
!). Таким образом, более поздние версии являются единственными, которые могут быть определены программой.
Переменные, которые квалифицируются с атрибутом const
не являются константами в смысле С. (лучше читать const
здесь unmutable
или invariant
)
Макросы просто текстовые замены, которые сделаны на этапе предварительной обработки. Часто стандартные заголовки библиотек содержат макросы, которые расширяются до подходящей константы для соответствующей системы. Таково например NULL
, false
, true
, INT_MAX
, CHAR_BIT
...
- 1. В чем разница между константой и константой {} в javascript
- 2. В чем разница между временной переменной и константой в C++?
- 3. В чем разница между ключевым словом noexcept и макросом _NOEXCEPT?
- 4. Разница между константой в рельсах и константой в ruby
- 5. В чем разница между константой и переменной в Ruby?
- 6. В чем разница между константой и неизменяемой в D?
- 7. В чем разница между макросом и плагином компилятора?
- 8. В чем разница между константой {document} = this.props и ({document} = this.props)
- 9. В чем разница между константой CONSTANT и значением CONSTANT = value?
- 10. В чем разница между «a» и «a»?
- 11. Есть ли разница между «функцией» и «макросом» в Objective-C?
- 12. разница между логической и физической константой
- 13. В чем разница между% и/в C?
- 14. Linux: в чем разница между этими двумя символической ссылкой команды
- 15. В чем разница между функцией-членом-константой и функцией-не-константой-членом?
- 16. Разница между переменной присваивания и константой литерала?
- 17. В чем разница между GLSL и c?
- 18. В чем разница между C# и .NET?
- 19. В чем разница между b и c?
- 20. В чем разница между «VC++» и «C++»?
- 21. В чем разница между && и &?
- 22. В чем разница между «./» и «../»?
- 23. Каковы различия между константой и изменчивым указателем в C?
- 24. Разница между константой внутри proc и снаружи
- 25. В чем разница между char [] и char [10] в C++?
- 26. В чем разница между (++ c) & (C++)?
- 27. В чем разница между «и»?
- 28. В чем разница между `{}` и `[]`?
- 29. В чем разница между == и ===?
- 30. В чем разница между «+» и «\ +»?
Но помните, что 'const' не делает что-то постоянное время компиляции. Например, вы не можете использовать его для объявления размера статически выделенного массива. – detly
@detly: right, in C. В C++ вы действительно можете –
'MAX_NAME_LENGTH' также является макросом. (Это не макрос * function-like *.) Я думаю, что лучшим описанием было бы то, что макросы эффективно выполняют только текстовую замену. – jamesdlin