X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/58aefa56e7ba8d562ba6f98ca601ff299c1646ba..c837a756e8c796c3e7926ab443ec03d6302efbb1:/docs/html/standard.htm diff --git a/docs/html/standard.htm b/docs/html/standard.htm index fc3c4db0a1..9bd3acac53 100644 --- a/docs/html/standard.htm +++ b/docs/html/standard.htm @@ -50,7 +50,13 @@ C++ portability guide by David Williams.
  • Don't use STL
  • Don't declare variables inside for()
  • Don't use nested classes
  • + +
    +
  • Other compiler limitations
  • +
    1. Use ternary operator ?: carefully
    2. +
    3. Don't use initializers with automatic arrays
    4. +
    5. Always have at least one constructor in a class with destructor

  • General recommendations
  • @@ -332,7 +338,17 @@ you can try the following:

    A nice side effect is that you don't need to recompile all the files including the header if you change the PrivateLibClass declaration (it's an example of a more general interface/implementation separation idea). + + +
    +

  • Other compiler limitations
  • +This section lists the less obvious limitations of the current C++ compilers +which are less restrictive than the ones mentioned in the previous section but +are may be even more dangerous as a program which compiles perfectly well on +some platform and seems to use only standard C++ featurs may still fail to +compile on another platform and/or with another compiler. +

    1. Use ternary operator ?: carefully
    2. The ternary operator ?: shouldn't be used with objects (i.e. if any of its operands are objects) because some compilers (notable Borland C++) fail @@ -351,6 +367,24 @@ to compile such code. else s = s2; + +

    3. Don't use initializers with automatic arrays
    4. +The initializers for automatic array variables are not supported by some older +compilers. For example, the following line +

      +    int daysInMonth[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
      +
      +will fail to compile with HP-UX C++ compiler. +

      Workaround: either make the array static or initialize each item +separately: in the (stupid) example above, the array should be definitely +declared as static const (assuming that the leap years are dealt with +elsewhere somehow...) which is ok. When an array is really not const, you +should initialize each element separately. + +

    5. Always have at least one constructor in a class with destructor
    6. +It is a good rule to follow in general, but some compilers (HP-UX) enforce it. +So even if you are sure that the default constructor for your class is ok but +it has a destructor, remember to add an empty default constructor to it.


    @@ -595,7 +629,7 @@ about terminating the last line. The linker on VMS is case-insensitive. Therefore all external variables and functions which differ only in case are not recognized by the linker as different, so all externals should differ in more than the case only: -i.e. GetId is the same as . +i.e. GetId is the same as GetID. @@ -730,8 +764,8 @@ the right header for given platform. Any new headers should conform to this setup as well to allow including <wx/foo.h> on any platform.

    Note that wxWindows implementation files should use quotes when including wxWindows -headers, not angled brackets. Applications should use angled brackets. There -is a reason for it (can anyone remember what this is?). +headers, not angled brackets. Applications should use angled brackets. This +ensures that the dependencies are correctly handled by the compiler.

  • Include guards

    To minimize the compile time C++ programmers often use so called include @@ -835,12 +869,6 @@ WXDLLEXPORT_DATA(extern wxApp*) wxTheApp; The reason for the strange syntax for data is that some compilers use different keyword ordering for exporting data. -

    There also several other places where you should take care of shared -library case: all IMPLEMENT_xxx macros which are usually used in the -corresponding .cpp files must be taken inside -"#if !USE_SHARED_LIBRARY" and in the #if USE_SHARED_LIBRARY -case you should put them inside common/cmndata.cpp file. -

  • Use Set/Get prefixes for accessors

    There is a convention in wxWindows to prefix the accessors (i.e. any simple, in general, inline function which does nothing else except changing or returning