Changeset 30954 in vbox
- Timestamp:
- Jul 21, 2010 12:37:49 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/doc/VBox-CodingGuidelines.cpp
r28800 r30954 29 29 * @section sec_vbox_guideline_compulsory Compulsory 30 30 * 31 * 32 * - The indentation size is 4 chars. 33 * 34 * - Tabs are only ever used in makefiles. 31 35 * 32 36 * - Use RT and VBOX types. … … 258 262 * @section sec_vbox_guideline_optional Optional 259 263 * 260 * First part is the actual coding style and all the prefixes. The second part264 * First part is the actual coding style and all the prefixes. The second part 261 265 * is a bunch of good advice. 262 266 * … … 264 268 * @subsection sec_vbox_guideline_optional_layout The code layout 265 269 * 266 * - Curly brackets are not indented. 267 * 268 * - Space before the parenthesis when it comes after a C keyword. 269 * 270 * - No space between argument and parenthesis. Exception for complex 271 * expression. 272 * Example: 270 * - Max line length is 130 chars. Exceptions are table-like 271 * code/initializers and Log*() statements (don't waste unnecessary 272 * vertical space on debug logging). 273 * 274 * - Comments should try stay within the usual 80 columns. 275 * 276 * - Curly brackets are not indented. Example: 277 * @code 278 * if (true) 279 * { 280 * Something1(); 281 * Something2(); 282 * } 283 * else 284 * { 285 * SomethingElse1(). 286 * SomethingElse2(). 287 * } 288 * @endcode 289 * 290 * - Space before the parentheses when it comes after a C keyword. 291 * 292 * - No space between argument and parentheses. Exception for complex 293 * expression. Example: 273 294 * @code 274 295 * if (PATMR3IsPatchGCAddr(pVM, GCPtr)) … … 279 300 * 280 301 * - else and if go on the same line if no { compound statement } 281 * follows the if. 282 * Example: 302 * follows the if. Example: 283 303 * @code 284 304 * if (fFlags & MYFLAGS_1) … … 292 312 * @endcode 293 313 * 294 * - The case is indented from the switch. 314 * 315 * - Slightly complex boolean expressions are split into multiple lines, 316 * putting the operators first on the line and indenting it all according 317 * to the nesting of the expression. The purpose is to make it as easy as 318 * possible to read. Example: 319 * @code 320 * if ( RT_SUCCESS(rc) 321 * || (fFlags & SOME_FLAG)) 322 * @endcode 323 * 324 * - When 'if' or 'while' statements gets long, the closing parentheses 325 * goes right below the opening parentheses. This may be applied to 326 * sub-expression. Example: 327 * @code 328 * if ( RT_SUCCESS(rc) 329 * || ( fSomeStuff 330 * && fSomeOtherStuff 331 * && fEvenMoreStuff 332 * ) 333 * || SomePredicateFunction() 334 * ) 335 * { 336 * ... 337 * } 338 * @endcode 339 * 340 * - The case is indented from the switch (to avoid having the braces for 341 * the 'case' at the same level as the 'switch' statement). 295 342 * 296 343 * - If a case needs curly brackets they contain the entire case, are not … … 323 370 * @endcode 324 371 * 325 * - Comments are in C style. C++ style comments are used for temporary372 * - Comments are in C style. C++ style comments are used for temporary 326 373 * disabling a few lines of code. 327 *328 * - Slightly complex boolean expressions are split into multiple lines,329 * putting the operators first on the line and indenting it all according330 * to the nesting of the expression. The purpose is to make it as easy as331 * possible to read.332 * Example:333 * @code334 * if ( RT_SUCCESS(rc)335 * || (fFlags & SOME_FLAG))336 * @endcode337 374 * 338 375 * - No unnecessary parentheses in expressions (just don't over do this … … 340 377 * precedence table if needed. 341 378 * 379 * - 'for (;;)' is preferred over 'while (true)' and 'while (1)'. 380 * 381 * - Parameters are indented to the start parentheses when breaking up 382 * function calls, declarations or prototypes. (This is in line with 383 * how 'if', 'for' and 'while' statements are done as well.) Example: 384 * @code 385 * RTPROCESS hProcess; 386 * int rc = RTProcCreateEx(papszArgs[0], 387 * papszArgs, 388 * RTENV_DEFAULT, 389 * fFlags, 390 * NULL, // phStdIn 391 * NULL, // phStdOut 392 * NULL, // phStdErr 393 * NULL, // pszAsUser 394 * NULL, // pszPassword 395 * &hProcess); 396 * @endcode 397 * 398 * - That Dijkstra is dead is no excuse for using gotos. 399 * 400 * 342 401 * 343 402 * @subsection sec_vbox_guideline_optional_prefix Variable / Member Prefixes … … 349 408 * - The 'm_' (or 'm') prefix means a class data member. 350 409 * 351 * In new code in Main, use "m_" (and common sense). As an exception, in Main,352 * i f a class encapsulates its member variables in an anonymous410 * In new code in Main, use "m_" (and common sense). As an exception, 411 * in Main, if a class encapsulates its member variables in an anonymous 353 412 * structure which is declared in the class, but defined only in the 354 * implementation (like this: "class X { struct Data; Data *m; }"), then 355 * the pointer to that struct is called "m" itself and its members then need no prefix, 356 * because the members are accessed with "m->member" already which is clear enough. 357 * 358 * - The 'p' prefix means pointer. For instance 'pVM' is pointer to VM. 359 * 360 * - The 'a' prefix means array. For instance 'aPages' could be read as array 361 * of pages. 362 * 363 * - The 'c' prefix means count. For instance 'cbBlock' could be read, count 364 * of bytes in block. 413 * implementation (like this: 'class X { struct Data; Data *m; }'), then 414 * the pointer to that struct is called 'm' itself and its members then 415 * need no prefix, because the members are accessed with 'm->member' 416 * already which is clear enough. 417 * 418 * - The 'a_' prefix means a parameter (argument) variable. This is 419 * sometimes written 'a' in parts of the source code that does not use 420 * the array prefix. 421 * 422 * - The 'p' prefix means pointer. For instance 'pVM' is pointer to VM. 423 * 424 * - The 'r' prefix means that something is passed by reference. 425 * 426 * - The 'k' prefix means that something is a constant. For instance 427 * 'enum { kStuff };'. This is usually not used in combination with 428 * 'p', 'r' or any such thing, it's main main use is to make enums 429 * easily identifiable. 430 * 431 * - The 'a' prefix means array. For instance 'aPages' could be read as 432 * array of pages. 433 * 434 * - The 'c' prefix means count. For instance 'cbBlock' could be read, 435 * count of bytes in block. 365 436 * 366 437 * - The 'off' prefix means offset. 367 438 * 368 * - The 'i' or 'idx' prefixes usually means index. Although the 'i' one can 369 * sometimes just mean signed integer. 439 * - The 'i' or 'idx' prefixes usually means index. Although the 'i' one 440 * can sometimes just mean signed integer. 441 * 442 * - The 'i[1-9]+' prefix means a fixed bit size variable. Frequently 443 * used with the int[1-9]+_t types. [type] 370 444 * 371 445 * - The 'e' (or 'enm') prefix means enum. 372 446 * 373 * - The 'u' prefix usually means unsigned integer. Exceptions follows. 374 * 375 * - The 'u[1-9]+' prefix means a fixed bit size variable. Frequently used 376 * with the uint[1-9]+_t types and with bitfields. 377 * 378 * - The 'b' prefix means byte or bytes. 379 * 380 * - The 'f' prefix means flags. Flags are unsigned integers of some kind or bools. 381 * 382 * - The 'ch' prefix means a char, the (signed) char type. 383 * 384 * - The 'wc' prefix means a wide/windows char, the RTUTF16 type. 385 * 386 * - The 'uc' prefix means a Unicode Code point, the RTUNICP type. 387 * 388 * - The 'uch' prefix means unsigned char. It's rarely used. 389 * 390 * - The 'sz' prefix means zero terminated character string (array of chars). (UTF-8) 391 * 392 * - The 'wsz' prefix means zero terminated wide/windows character string (array of RTUTF16). 393 * 394 * - The 'usz' prefix means zero terminated Unicode string (array of RTUNICP). 447 * - The 'u' prefix usually means unsigned integer. Exceptions follows. 448 * 449 * - The 'u[1-9]+' prefix means a fixed bit size variable. Frequently 450 * used with the uint[1-9]+_t types and with bitfields. [type] 451 * 452 * - The 'b' prefix means byte or bytes. [type] 453 * 454 * - The 'f' prefix means flags. Flags are unsigned integers of some kind 455 * or booleans. 456 * 457 * - TODO: need prefix for real float. [type] 458 * 459 * - The 'rd' prefix means real double and is used for 'double' variables. 460 * [type] 461 * 462 * - The 'lrd' prefix means long real double and is used for 'long double' 463 * variables. [type] 464 * 465 * - The 'ch' prefix means a char, the (signed) char type. [type] 466 * 467 * - The 'wc' prefix means a wide/windows char, the RTUTF16 type. [type] 468 * 469 * - The 'uc' prefix means a Unicode Code point, the RTUNICP type. [type] 470 * 471 * - The 'uch' prefix means unsigned char. It's rarely used. [type] 472 * 473 * - The 'sz' prefix means zero terminated character string (array of 474 * chars). (UTF-8) 475 * 476 * - The 'wsz' prefix means zero terminated wide/windows character string 477 * (array of RTUTF16). 478 * 479 * - The 'usz' prefix means zero terminated Unicode string (array of 480 * RTUNICP). 395 481 * 396 482 * - The 'str' prefix means C++ string; either a std::string or, in Main, 397 * a Utf8Str or, in Qt, a QString 398 * 399 * - The 'bstr' prefix, in Main, means a UTF-16 Bstr. 483 * a Utf8Str or, in Qt, a QString. When used with 'p', 'r', 'a' or 'c' 484 * the first letter should be capitalized. 485 * 486 * - The 'bstr' prefix, in Main, means a UTF-16 Bstr. When used with 'p', 487 * 'r', 'a' or 'c' the first letter should be capitalized. 400 488 * 401 489 * - The 'pfn' prefix means pointer to function. Common usage is 'pfnCallback' 402 490 * and such like. 491 * 492 * - The 'psz' prefix is a combination of 'p' and 'sz' and thus means 493 * pointer to a zero terminated character string. (UTF-8) 494 * 495 * - The 'pcsz' prefix is used to indicate constant string pointers in 496 * parts of the code. Most code uses 'psz' for const and non-const 497 * string pointers. 498 * 499 * - The 'l' prefix means (signed) long. We try avoid using this, 500 * expecially with the 'LONG' types in Main as these are not 'long' on 501 * 64-bit non-Windows platforms and can cause confusion. Alternatives: 502 * 'i' or 'i32'. [type] 503 * 504 * - The 'ul' prefix means unsigned long. We try avoid using this, 505 * expecially with the 'ULONG' types in Main as these are not 'unsigned 506 * long' on 64-bit non-Windows platforms and can cause confusion. 507 * Alternatives: 'u' or 'u32'. [type] 403 508 * 404 509 *
Note:
See TracChangeset
for help on using the changeset viewer.