Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Проблема при компиляции

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Проблема при компиляции
Имя
Сообщение << Старые топики   Новые топики >>
Проблема при компиляции - 2011-03-01 23:43:13.026666   
0tnbo6ap44

Сообщений: 1
Оценки: 0
Присоединился: 2011-03-01 21:30:35.923333
quote:

#include &lt;stdlib.h&gt;
#include &lt;stdio.h&gt;
#include &lt;windows.h&gt;

void foo(DWORD d1)
{
}

int main(int argc, char *argv[])
{
foo(0xFE+1);
return 0;
}



test.cpp:11:6: invalid suffix "+1" on integer constant

Что означает эта ошибка, и почему так нельзя делать?
Post #: 1
RE: Проблема при компиляции - 2011-03-02 03:30:38.743333   
vetronom

Сообщений: 9
Оценки: 0
Присоединился: 2011-03-01 19:22:18.916666
компайлеру мерещится E+1 :D (типа плавающая запятая)
нужно вставить пробел перед +1, и всё пройдёт
Post #: 2
RE: Проблема при компиляции - 2011-03-02 20:41:08.010000   
Genco

Сообщений: 1662
Оценки: 90
Присоединился: 2007-12-16 23:11:22.003333
Или единицу в 16-ричном виде записать.
Post #: 3
RE: Проблема при компиляции - 2011-03-02 20:49:38.843333   
Sunzer

Сообщений: 253
Оценки: 31190
Присоединился: 2007-06-15 19:23:32.436666
Все же не понимаю сложность парсинга данной конструкции компилятором.
Post #: 4
RE: Проблема при компиляции - 2011-03-02 21:00:59.293333   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
А ты выполни код:printf ("%e\n", 1.2345);Видишь какая хитрая экспоненциальная запись числа? Там у числа есть суффикс, знак + (в других ситуациях может быть -), и потом порядок. Вот здесь компилятор и видит этот суффикс, но не знает как его присобачить к шестнадцатеричному числу.
Post #: 5
RE: Проблема при компиляции - 2011-03-02 21:08:10.046666   
Sunzer

Сообщений: 253
Оценки: 31190
Присоединился: 2007-06-15 19:23:32.436666
Все из за "E" значит, и как с этим боротся? foo(0xFF-1); ? Не удобно так, но деваться некуда.

Благодарю за ответы.
Post #: 6
RE: Проблема при компиляции - 2011-03-03 16:27:48.920000   
Klofelin

Сообщений: 68
Оценки: 0
Присоединился: 2010-09-03 20:58:52.116666
А чего там у вас за компилятор-то? Я попробовал скомпилить код из первого поста в 2008-студии, так никаких ошибок и предупреждений, все ОК.
Post #: 7
RE: Проблема при компиляции - 2011-03-03 16:34:20.140000   
Sunzer

Сообщений: 253
Оценки: 31190
Присоединился: 2007-06-15 19:23:32.436666
gcc
Post #: 8
RE: Проблема при компиляции - 2011-03-03 18:42:18.306666   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Баг в гцц
Post #: 9
RE: Проблема при компиляции - 2011-03-03 23:27:05.510000   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
quote:

ORIGINAL: _SaZ_
Баг в гцц

Это достоверная информация или личное мнение? Я к тому, что моё личное мнение именно такое – баг. Но мне лениво лезть в стандарт на C, и вычитывать какое же поведение должно быть верным. Знать хочется, но выяснять лень.
quote:

ORIGINAL: Sunzer
Все из за "E" значит, и как с этим боротся? foo(0xFF-1); ? Не удобно так, но деваться некуда.

Просто придерживайся какого-нибудь из пристойных стилей оформления кода и ставь пробелы вокруг бинарных операторов. Читабельность будет выше. И по-ходу дела, читабельность улучшится не только для гуманоидов, но и для роботов-компиляторов тоже.
Post #: 10
RE: Проблема при компиляции - 2011-03-04 00:29:02.026666   
Sunzer

Сообщений: 253
Оценки: 31190
Присоединился: 2007-06-15 19:23:32.436666
quote:

ставь пробелы вокруг бинарных операторов. Читабельность будет выше.


Единица для примера была, сделал так:

Post #: 11
RE: Проблема при компиляции - 2011-03-04 01:43:33.513333   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Я позволил себе поплагиатить, вот что из этого вышло: http://www.rsdn.ru/forum/cpp/4178550.flat.aspx
Post #: 12
RE: Проблема при компиляции - 2011-03-04 17:48:27.846666   
Klofelin

Сообщений: 68
Оценки: 0
Присоединился: 2010-09-03 20:58:52.116666
А Dev-C++ это тоже gcc? Если да, то вот еще глюк интересный, может уже кто сталкивался, я лично впервые. Вот это у меня не компилируется
#include &lt;iostream&gt; using namespace std; void plus() { cout &lt;&lt; 2 + 2 &lt;&lt; endl; } int main() { plus(); return 0; } Полчаса думал, что это значит, только потом начал догадываться[:-]
Post #: 13
RE: Проблема при компиляции - 2011-03-04 17:56:05.923333   
Sunzer

Сообщений: 253
Оценки: 31190
Присоединился: 2007-06-15 19:23:32.436666
Зарезервированное слово "plus"?

quote:

А Dev-C++ это тоже gcc?


Да, он использует тоже MinGW.
Post #: 14
RE: Проблема при компиляции - 2011-03-04 18:17:31.863333   
Klofelin

Сообщений: 68
Оценки: 0
Присоединился: 2010-09-03 20:58:52.116666

quote:

ORIGINAL: Sunzer
Зарезервированное слово "plus"?

Да, только это слово не есть зарезервированное/ключевое слово языка. Это из недр STL, но я же не подключал никаких заголовков. Считаю баг однозначно.
Post #: 15
RE: Проблема при компиляции - 2011-03-04 20:18:48.650000   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
http://codepad.org/qrxOs92i - дело тут не в STL

Но, вообще, странно…
Post #: 16
RE: Проблема при компиляции - 2011-03-04 21:35:41.270000   
Sunzer

Сообщений: 253
Оценки: 31190
Присоединился: 2007-06-15 19:23:32.436666
Может топик уже стоит переименовать в "Баги в gcc" ?
Post #: 17
RE: Проблема при компиляции - 2011-03-04 21:40:09.866666   
Klofelin

Сообщений: 68
Оценки: 0
Присоединился: 2010-09-03 20:58:52.116666

quote:

ORIGINAL: _SaZ_
Но, вообще, странно…

Мне выдал такую ошибку: C:\Dev-Cpp\main.cpp In function `int main()': 'plus' undeclared (first use this function). Полный бред.

Причина теперь понятна, компилятор включил слово "plus" в пространство имен std. Студия, например, этого не делает и мне лично это кажется правильнее. Хорошо еще, что функциию я назвал "plus". Слово, конечно, подозрительное и сразу понятно куда копать. Но если бы случайно я назвал ее: multiplies, divides, greater, not_equal_to, logical_or … Много еще. Я бы точно голову сломал, ищя ошибку. Особенно с такой подсказкой, которую мне выдал компилятор.
Post #: 18
RE: Проблема при компиляции - 2011-03-04 22:04:57.130000   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
quote:

ORIGINAL: Sunzer
Единица для примера была, сделал так:
[…]

А… Ну-ну. Успехов.

quote:

ORIGINAL: Klofelin
Я бы точно голову сломал, ищя ошибку. Особенно с такой подсказкой, которую мне выдал компилятор.

Да ладно, всё понятно. Видно же по тексту ошибки, что plus просто где-то уже объявлялся. Но, то ли у них gcc какой-то левый, то ли они копируют лишь первые строки ошибки. Мне gcc говорит следующее:[rgo tmp]$ g++ -c tmp.cc tmp.cc: In function ‘int main()’: tmp.cc:11: ошибка: reference to ‘plus’ is ambiguous tmp.cc:4: ошибка: candidates are: void plus() /usr/lib/gcc/x86_64-pc-linux-gnu/4.4.4/include/g++-v4/bits/stl_function.h:135: ошибка: template&lt;class _Tp&gt; struct std::plus tmp.cc:11: ошибка: reference to ‘plus’ is ambiguous tmp.cc:4: ошибка: candidates are: void plus() /usr/lib/gcc/x86_64-pc-linux-gnu/4.4.4/include/g++-v4/bits/stl_function.h:135: ошибка: template&lt;class _Tp&gt; struct std::plusВсё понятно без дальнейших слов. iostream, судя по всему, зачем-то экспортирует struct plus, беря его из stl_functional.h

Post #: 19
RE: Проблема при компиляции - 2011-03-06 04:26:12.496666   
Denaturat

Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
quote:

ORIGINAL: Sunzer

Может топик уже стоит переименовать в "Баги в gcc" ?


в этом треде нет ничего, что можно было бы считать багом - во всяком случае, в gcc

если уж вам так хочется есть кактус C++ - делайте это, по крайней мере, с довольным видом
Post #: 20
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Проблема при компиляции







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.