c++ - design by contract
- Jim Jennings (32/32) Mar 25 2003 Is "design by contract implemented? I tried it with the following result...
- Walter (7/39) Mar 25 2003 It is implemented. Unfortunately, stl uses __in and __out as variable na...
- Jim Jennings (43/50) Mar 25 2003 names,
- Nic Tiger (27/78) Mar 25 2003 Right syntax is:
- Jim Jennings (9/95) Mar 25 2003 Thank you, Walter and Nic, It works now.
- Walter (15/66) Mar 25 2003 Rewrite the function body as:
Is "design by contract implemented? I tried it with the following results: // contr.cpp #include <iostream> #include <cassert> using namespace std; // just in case. int main(int argc, char* argv[]) { __in { assert(argc == 3); } __body { std::cout<< "argv[1] == " << argv[1] << ", argv[2] == " << argv[2] << '\n'; } return 1; } dmc contr -I\dm\stlport\stlport { ^ contr.cpp(9) : Error: undefined identifier '__stl_in' __body ^ contr.cpp(12) : Error: '=', ';' or ',' expected return 1; ^ contr.cpp(16) : Error: '=', ';' or ',' expected } ^ contr.cpp(17) : Error: identifier or '( declarator )' expected --- errorlevel 1
Mar 25 2003
It is implemented. Unfortunately, stl uses __in and __out as variable names, which conflict with the keywords, so they are #defined to be __stl_in and __stl_out. You can #undef __in and #undef __out after #including the stlport files. "Jim Jennings" <jwjenn mindspring.com> wrote in message news:b5q3ih$1vmd$1 digitaldaemon.com...Is "design by contract implemented? I tried it with the following results: // contr.cpp #include <iostream> #include <cassert> using namespace std; // just in case. int main(int argc, char* argv[]) { __in { assert(argc == 3); } __body { std::cout<< "argv[1] == " << argv[1] << ", argv[2] == " <<argv[2]<< '\n'; } return 1; } dmc contr -I\dm\stlport\stlport { ^ contr.cpp(9) : Error: undefined identifier '__stl_in' __body ^ contr.cpp(12) : Error: '=', ';' or ',' expected return 1; ^ contr.cpp(16) : Error: '=', ';' or ',' expected } ^ contr.cpp(17) : Error: identifier or '( declarator )' expected --- errorlevel 1
Mar 25 2003
"Walter" <walter digitalmars.com> wrote in message news:b5q6hb$2211$1 digitaldaemon.com...It is implemented. Unfortunately, stl uses __in and __out as variablenames,which conflict with the keywords, so they are #defined to be __stl_in and __stl_out. You can #undef __in and #undef __out after #including thestlportfiles. "Jim Jennings" <jwjenn mindspring.com> wrote in message news:b5q3ih$1vmd$1 digitaldaemon.com...Now I get this: (DBC is low priority, It looked simpler than all the "try ... catch" bloat) // contr.cpp #include <iostream> #include <cassert> #undef __in #undef __out using namespace std; // just in case. int main(int argc, char* argv[]) { __in { assert(argc == 3); } __body { std::cout<< "argv[1] == " << argv[1] << ", argv[2] == " << argv[2] << '\n'; } return 1; } dmc contr -I\dm\stlport\stlport __in ^ contr.cpp(9) : Error: '=', ';' or ',' expected __body ^ contr.cpp(13) : Error: '=', ';' or ',' expected } ^ contr.cpp(17) : Error: identifier or '( declarator )' expected return 1; ^ contr.cpp(18) : Error: '=', ';' or ',' expected } ^ contr.cpp(19) : Error: identifier or '( declarator )' expected Fatal error: too many errors --- errorlevel 1Is "design by contract implemented?
Mar 25 2003
Right syntax is: ---------------------------------- #include <iostream> #include <cassert> #undef __in #undef __out using namespace std; // just in case. int main(int argc, char* argv[]) __in { assert(argc == 3); } __body { std::cout<< "argv[1] == " << argv[1] << ", argv[2] == " << argv[2] << '\n'; return 1; } ---------------------------------------------- Note that __in, __out and __body sections follow right after function header (not in {} braces). And mention that you should specify -D switch (sc -D dbc.cpp). For me it doesn't work with STL (linker issues errors about unresolved names). Nic Tiger. "Jim Jennings" <jwjenn mindspring.com> сообщил/сообщила в новостях следующее: news:b5q96h$23sl$1 digitaldaemon.com..."Walter" <walter digitalmars.com> wrote in message news:b5q6hb$2211$1 digitaldaemon.com...andIt is implemented. Unfortunately, stl uses __in and __out as variablenames,which conflict with the keywords, so they are #defined to be __stl_in__stl_out. You can #undef __in and #undef __out after #including thestlportfiles. "Jim Jennings" <jwjenn mindspring.com> wrote in message news:b5q3ih$1vmd$1 digitaldaemon.com...Now I get this: (DBC is low priority, It looked simpler than all the "try ... catch" bloat) // contr.cpp #include <iostream> #include <cassert> #undef __in #undef __out using namespace std; // just in case. int main(int argc, char* argv[]) { __in { assert(argc == 3); } __body { std::cout<< "argv[1] == " << argv[1] << ", argv[2] == " << argv[2] << '\n'; } return 1; } dmc contr -I\dm\stlport\stlport __in ^ contr.cpp(9) : Error: '=', ';' or ',' expected __body ^ contr.cpp(13) : Error: '=', ';' or ',' expected } ^ contr.cpp(17) : Error: identifier or '( declarator )' expected return 1; ^ contr.cpp(18) : Error: '=', ';' or ',' expected } ^ contr.cpp(19) : Error: identifier or '( declarator )' expected Fatal error: too many errors --- errorlevel 1Is "design by contract implemented?
Mar 25 2003
Thank you, Walter and Nic, It works now. Jim J. P.S. I am positive that I tried that, and it complained about not having a closing brace. I probably put a left brace in instead of a right brace. careless! "Nic Tiger" <nictiger progtech.ru> wrote in message news:b5qf9c$28g6$1 digitaldaemon.com...Right syntax is: ---------------------------------- #include <iostream> #include <cassert> #undef __in #undef __out using namespace std; // just in case. int main(int argc, char* argv[]) __in { assert(argc == 3); } __body { std::cout<< "argv[1] == " << argv[1] << ", argv[2] == " << argv[2] << '\n'; return 1; } ---------------------------------------------- Note that __in, __out and __body sections follow right after functionheader(not in {} braces). And mention that you should specify -D switch (sc -D dbc.cpp). For me it doesn't work with STL (linker issues errors about unresolved names). Nic Tiger. "Jim Jennings" <jwjenn mindspring.com> сообщил/сообщила в новостях следующее: news:b5q96h$23sl$1 digitaldaemon.com..."try"Walter" <walter digitalmars.com> wrote in message news:b5q6hb$2211$1 digitaldaemon.com...andIt is implemented. Unfortunately, stl uses __in and __out as variablenames,which conflict with the keywords, so they are #defined to be __stl_in__stl_out. You can #undef __in and #undef __out after #including thestlportfiles. "Jim Jennings" <jwjenn mindspring.com> wrote in message news:b5q3ih$1vmd$1 digitaldaemon.com...Now I get this: (DBC is low priority, It looked simpler than all theIs "design by contract implemented?... catch" bloat) // contr.cpp #include <iostream> #include <cassert> #undef __in #undef __out using namespace std; // just in case. int main(int argc, char* argv[]) { __in { assert(argc == 3); } __body { std::cout<< "argv[1] == " << argv[1] << ", argv[2] == " << argv[2] << '\n'; } return 1; } dmc contr -I\dm\stlport\stlport __in ^ contr.cpp(9) : Error: '=', ';' or ',' expected __body ^ contr.cpp(13) : Error: '=', ';' or ',' expected } ^ contr.cpp(17) : Error: identifier or '( declarator )' expected return 1; ^ contr.cpp(18) : Error: '=', ';' or ',' expected } ^ contr.cpp(19) : Error: identifier or '( declarator )' expected Fatal error: too many errors --- errorlevel 1
Mar 25 2003
Rewrite the function body as: int main(int argc, char* argv[]) __in { assert(argc == 3); } __body { std::cout<< "argv[1] == " << argv[1] << ", argv[2] == " << argv[2] << '\n'; return 1; } "Jim Jennings" <jwjenn mindspring.com> wrote in message news:b5q96h$23sl$1 digitaldaemon.com..."Walter" <walter digitalmars.com> wrote in message news:b5q6hb$2211$1 digitaldaemon.com...andIt is implemented. Unfortunately, stl uses __in and __out as variablenames,which conflict with the keywords, so they are #defined to be __stl_in__stl_out. You can #undef __in and #undef __out after #including thestlportfiles. "Jim Jennings" <jwjenn mindspring.com> wrote in message news:b5q3ih$1vmd$1 digitaldaemon.com...Now I get this: (DBC is low priority, It looked simpler than all the "try ... catch" bloat) // contr.cpp #include <iostream> #include <cassert> #undef __in #undef __out using namespace std; // just in case. int main(int argc, char* argv[]) { __in { assert(argc == 3); } __body { std::cout<< "argv[1] == " << argv[1] << ", argv[2] == " << argv[2] << '\n'; } return 1; } dmc contr -I\dm\stlport\stlport __in ^ contr.cpp(9) : Error: '=', ';' or ',' expected __body ^ contr.cpp(13) : Error: '=', ';' or ',' expected } ^ contr.cpp(17) : Error: identifier or '( declarator )' expected return 1; ^ contr.cpp(18) : Error: '=', ';' or ',' expected } ^ contr.cpp(19) : Error: identifier or '( declarator )' expected Fatal error: too many errors --- errorlevel 1Is "design by contract implemented?
Mar 25 2003