Здравствуйте, Caracrist, Вы писали:
C>я никаких пунктов стандарта не нарушаю?
C>
C>#define class struct
C>#define protected public
C>#define private public
C>#include"imported.h"
C>#undef class
C>#undef protected
C>#undef private
C>
Считается плохой практикой переопределять ключевые слова. Проблем можно огрести по самое не горюй.
Здравствуйте, little_alex, Вы писали:
_>Здравствуйте, Caracrist, Вы писали:
C>>Здравствуйте, Sash_xp, Вы писали:
S_>>>PS Это ведь шутка, да?
C>>в работе я такое не использую, а вот эксперимент поставил... И все работает корректно
_>В некоторых случаях будет ошибка линковки — имя "struct A" и имя "class A" по разному может декорироваться компилятором.
Здравствуйте, Caracrist, Вы писали:
C>я никаких пунктов стандарта не нарушаю?
C>
C>#define class struct
C>#define protected public
C>#define private public
C>#include"imported.h"
C>#undef class
C>#undef protected
C>#undef private
C>
Ответ зависит от содержания "imported.h". Если в нем используется директива препроцессора 'include' для C++ Standard Library header, то будет нарушен 17.4.3.1.1 (если не предпринимать дополнительных мер):
A translation unit that includes a header shall not contain any macros that define names declared or defined in that header. Nor shall such a translation unit define macros for names lexically identical to keywords.
C>#define class struct
C>#define protected public
C>#define private public
C>#include"imported.h"
C>#undef class
C>#undef protected
C>#undef private
C>
так можно испортить себе карму и в следующей жизни стать баобабом.
ЮЖ>Ответ зависит от содержания "imported.h". Если в нем используется директива препроцессора 'include' для C++ Standard Library header, то будет нарушен 17.4.3.1.1 (если не предпринимать дополнительных мер):
ЮЖ>
A translation unit that includes a header shall not contain any macros that define names declared or defined in that header. Nor shall such a translation unit define macros for names lexically identical to keywords.
на самом деле, содержалась (для эксперимента), меры принял (заиклудил заранее) и всё заработало.
Нормуль. Только в большинстве случаев разработчикам сиплюсплюсных библиотек приходится использовать уродскую идиому PImpl, которая делает такой финт бесполезным.
Здравствуйте, Caracrist, Вы писали:
C>честно почитал, но проблему не нашел... ткните носом
Это может быть я что-то не понимаю.
Речь идет о том, что имена public и protected методов по-разному декорируются компилятором и если использовать improted.h в одном мести и "пропатченный" imported.h в другом, то они вместе не слинкуются
Здравствуйте, little_alex, Вы писали:
_>Здравствуйте, Caracrist, Вы писали:
C>>честно почитал, но проблему не нашел... ткните носом _>Это может быть я что-то не понимаю. _>Речь идет о том, что имена public и protected методов по-разному декорируются компилятором и если использовать improted.h в одном мести и "пропатченный" imported.h в другом, то они вместе не слинкуются _>
Здравствуйте, Тролль зеленый и толстый, Вы писали:
ТЗИ>Нормуль. Только в большинстве случаев разработчикам сиплюсплюсных библиотек приходится использовать уродскую идиому PImpl, которая делает такой финт бесполезным.
Уродских идиом не бывает, бывает их уродское использование
--
Re[10]: насколько такая "наглость" работоспособна?
Здравствуйте, Caracrist, Вы писали:
C>я никаких пунктов стандарта не нарушаю?
C>
C>#define class struct
C>#define protected public
C>#define private public
C>#include"imported.h"
C>#undef class
C>#undef protected
C>#undef private
C>
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Это, таки, пореже юзают, чем else
C>альтернатива: C>
C>#define else
C>
Тоже может не собраться, к сожалению
do
if( cond1 )
op1;
else
op2;
while( cond2 );
но это уже совсем маргинальщина, вроде
Есть, кстати, ещё и третий путь
#define if for( sometimesFalseFirstTimeAndSometimesTrueNextTimes aFFTASTNT; aFFTASTNT.Test();) if
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском