Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Для новичков > Присвоение констант |
Автор: Sergio 26.11.2008, 13:30 | ||
Привет всем. Почему нельзя константу(через define) присвоить переменной?:
Спасибо. |
Автор: Rififi 26.11.2008, 13:43 |
Sergio, Потому что в результате обработки этой строчки пре-процессором, получается неверный с точки зрения синтаксиса C/C++ код. Правильно так: #define PLAY_X 0 int positionX = PLAY_X; |
Автор: bsa 26.11.2008, 14:08 | ||
Sergio, это не константа. Это макрос. Если тебе нужна константа, то это делается так:
|
Автор: UnrealMan 26.11.2008, 16:18 | ||
Зачем? |
Автор: Alca 26.11.2008, 16:43 | ||||
Ловишь разницу?
и
|
Автор: warmonger_ 26.11.2008, 17:40 |
Тоже не корректно, хотя ошибки компиляции не будет. |
Автор: vinter 26.11.2008, 17:51 |
какбэ пофиг ![]() |
Автор: taiven 26.11.2008, 18:07 | ||
тем кто не понимает, что такое макроподстановка:
|
Автор: warmonger_ 26.11.2008, 18:36 |
как бы не одно и то же ![]() |
Автор: UnrealMan 26.11.2008, 19:48 | ||||
При таком использовании
ошибка компиляции может быть. |
Автор: warmonger_ 26.11.2008, 20:36 | ||||
это же будет эквивалентно
выходит пустой оператор ; правильно? или нет? ![]() |
Автор: vinter 26.11.2008, 20:36 |
почему, просто пустой оператор, откуда ошибка? |
Автор: mes 26.11.2008, 20:48 | ||
попробуйте так откомпилить ![]()
|
Автор: warmonger_ 26.11.2008, 20:58 |
это же немного другое. когда то не должно быть ошибок |
Автор: UnrealMan 26.11.2008, 21:41 | ||
Правильно. В namespace scope свободная точка с запятой стандартом не допускается. При попытке скомпилить такую программу
http://www.comeaucomputing.com/tryitout/ выдаст ошибку, и будет прав. |
Автор: warmonger_ 26.11.2008, 21:47 | ||
а можно ссылку на стандарт, где именно написано? |
Автор: UnrealMan 26.11.2008, 22:01 | ||
В приложении A описана грамматика языка. Всё, что не вписывается в грамматику языка, не разрешено. Для simple-declaration отдельно оговорено, что
|
Автор: knut 26.11.2008, 22:40 |
[B]Sergio[/B вот на соседнем форуме была похожая http://forum.sources.ru/index.php?showtopic=256605&view=showall |
Автор: J0ker 28.11.2008, 08:40 | ||||
в C++ (в отличии от C) константы имеют internal linkage если не объявлены external поэтому static не нужен |
Автор: Lazin 28.11.2008, 09:03 |
нужен, если константа член класса ![]() |
Автор: MAKCim 28.11.2008, 09:26 | ||||
UnrealMan, и причем здесь ;? это обычный оператор
==
я не вижу где тут грамматика нарушается тут два выражения одно из которых пусто |
Автор: UnrealMan 28.11.2008, 17:47 | ||
Внутри функции такая запись
допустима, т.к. точка с запятой может выступать в качестве statement. В class scope и namespace scope эта запись недопустима. |
Автор: bsa 28.11.2008, 18:51 | ||
Например, g++ 4.1.2 хавает без проблем:
|
Автор: MAKCim 28.11.2008, 19:31 |
ну и чем по-твоему отличаются int a = 4; и ; в class scope и namespace scope? |
Автор: J0ker 28.11.2008, 20:13 | ||
в контексте класса static означает несколько другое, нежели вне |