LINUX.ORG.RU
ФорумTalks

[ненависть] msvc как всегда

 


0

2

Написал некоторую базу кода на линуксе, все собиралось без единого ворнинга с -W3. Стало необходимо портировать это на мастдай, благо, все было на cmake.

В результате - о, УЖАС, - оно ругается на переменную с именем errno, объявленную внутри структуры! Какой-то мудак прописал в SDK

#define errno <......>

и теперь придется переписывать половину кода!

А еще этот великий компилятор ругается на мои макросы, которые на gcc идеально компилируются. В сумме выдает 250 ошибок, мать его, хотя код написан полностью в соответствии с C89!

Как я ненавижу этот сраный виндовз!

★★

>и теперь придется переписывать половину кода!

#undef добавь. А в целом согласен, за чистотой неймспейса они совсем не следят(

annulen ★★★★★
()
Ответ на: комментарий от annulen

Опа, даже идеи такой не было. Попробую, спасибо.

bk_ ★★
() автор топика

The <errno.h> header shall provide a declaration or definition for errno. The symbol errno shall expand to a modifiable lvalue of type int. It is unspecified whether errno is a macro or an identifier declared with external linkage. If a macro definition is suppressed in order to access an actual object, or a program defines an identifier with the name errno, the behavior is undefined.

link

ival ★★
()

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

Reset ★★★★★
()
Ответ на: комментарий от Reset

>полно других перлов

Я попрошу не очернять перл микрософтом.

tzukko
()

Какой-то мудак прописал в SDK

Обрати внимание, ты наступил на грабли, но вместо того, чтобы заглянуть в man, ты начинаешь пенять на всех вокруг. Ты считаешь себя самым умным?

ival ★★
()
Ответ на: комментарий от Reset

Ой, какие мы умные.

errno - общепринятое в юниксах обозначение номера ошибки, чтоб ты знал.

bk_ ★★
() автор топика
Ответ на: комментарий от bk_

undef

а что у тебя код такой жуткий, что простейший рефакторинг rename заставляет создавать ненависть-треды?

stevejobs ★★★★☆
()

«Изменяли ли вы значение 4? А неумышленно?»

Xellos ★★★★★
()
Ответ на: комментарий от bk_

Спасибо, конечно, но эта копипаста никакого отношения к делу не имеет.

Почему?

ival ★★
()
Ответ на: комментарий от bk_

Очевидно, что надо либо переименовать либо убрать errno из структуры. #undef errno это костыль, который может привести к еще большим проблемам

Reset ★★★★★
()
Ответ на: комментарий от bk_

Я знаю, также я знаю, что оно может быть макросом и дурак в данном случае как раз ты.

Reset ★★★★★
()
Ответ на: комментарий от cuki

>это будет для тебя уроком, как связываться с MS

а ведь могло бы стать уроком как писать хороший кросс-платформенный код

annulen ★★★★★
()

ТС скажи мне - ты упорот? Нет, я серьезно спрашиваю ) Ибо только в состоянии полной неадекватности может захотется компилировать свой С/С++ код под вендой при помощи MSVC. Если ты изначально на нем не пишешь, или не учитываешь его особенности, то извращенный и жесткий секс тебе обеспечен.

Andru ★★★★
()
Ответ на: комментарий от Reset

>#undef errno это костыль, который может привести к еще большим проблемам

o rly? если после него нет хедеров и код не использует эту лексему как макрос (что очевидно по условию), должно прокатить

annulen ★★★★★
()

Поплачь, легче будет.

А «переменную с именем errno, объявленную внутри структуры» была совсем плохая идея, думаю уже объяснили почему.

shelA
()

>#define errno <......>

и теперь придется переписывать половину кода!

Ваша IDE н умеет рефакторинг? О_о

drakmail ★★★★
()
Ответ на: комментарий от drakmail

> и теперь придется переписывать половину кода!

Ваша IDE н умеет рефакторинг? О_о


меня больше удивило, что у него errno составляет половину кода :)

aho
()
Ответ на: комментарий от aho

errno >> river >> cout
cin >> river >> errno
errno >> errno && errno
errno errno errno errno

stevejobs ★★★★☆
()

>и теперь придется переписывать половину кода!

Мсье не знает про
Edit->Find->Find and replace ?

Dimanc ★★
()
Ответ на: комментарий от Reset

Приспешник майкрософта ты этакий, неудачник, какашка, посмейся над собой :)

bk_ ★★
() автор топика

так я не понял, зачем вы засунули errno в структуру? Что могло с подвигнуть вас на такой странный шаг? и почему нельзя

sed -i s/errno/my_errno/g

?

drBatty ★★
()

В результате - о, УЖАС, - оно ругается на переменную с именем errno, объявленную внутри структуры! Какой-то мудак прописал в SDK

#define errno <......>

и теперь придется переписывать половину кода!

Представь себе - errno часто делают макросом и это нормально. Потому что эта переменная должна быть своя для каждого треда и ее очевидно реализовывать как макрос.

Специально для тех, кто в танке, код /usr/include/bits/errno.h из glibc:

#  if !defined _LIBC || defined _LIBC_REENTRANT
/* When using threads, errno is a per-thread value.  */
#   define errno (*__errno_location ())
#  endif
# endif /* !__ASSEMBLER__ */

Так что выпрямляй руки.

Pavval ★★★★★
()

> Какой-то мудак прописал в SDK

#define errno <......>

Гыгыг. А ты в глибсишное errno.h заглядывал? :)

yoghurt ★★★★★
()
Ответ на: комментарий от Andru

>Ибо только в состоянии полной неадекватности может захотется компилировать свой С/С++ код под вендой при помощи MSVC

Ой да ладно. Если всё написано правильно и руки прямые, в MSVC всё собирается без особого напряга. Особенно, когда есть cmake

yoghurt ★★★★★
()
Ответ на: комментарий от yoghurt

Скорее наоборот. Тащить какой-то тормозный инородный костыль в винду.

Reset ★★★★★
()
Ответ на: комментарий от reader

из серии «невероятно, но фактъ»: во времена Qt 4.2.3 qt-demo (особенно примеры с графикой), будучи собранным с msvc2005, тормозило и лагало сильнее, нежели собранное с gcc3.x

yoghurt ★★★★★
()
Ответ на: комментарий от Reset

> Со скоростью компиляции всё очень и очень печально.

Это грустно, но для небольших проектов терпимо. А производительность полученного кода сильно уступает MSVC?

reader
()
Ответ на: комментарий от reader

Если небольшой проект использует boost, то это будет трындец. Производительность на уровне.

Reset ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.