PVS-ಸ್ಟುಡಿಯೊದ ಸ್ವತಂತ್ರ ವಿಮರ್ಶೆ (Linux, C++)

PVS ಲಿನಕ್ಸ್ ಅಡಿಯಲ್ಲಿ ವಿಶ್ಲೇಷಿಸಲು ಕಲಿತ ಪ್ರಕಟಣೆಯನ್ನು ನಾನು ನೋಡಿದೆ ಮತ್ತು ಅದನ್ನು ನನ್ನ ಸ್ವಂತ ಯೋಜನೆಗಳಲ್ಲಿ ಪ್ರಯತ್ನಿಸಲು ನಿರ್ಧರಿಸಿದೆ. ಮತ್ತು ಅದರಿಂದ ಹೊರಬಂದದ್ದು ಇದು.


ಪರಿವಿಡಿ

  1. ಪ್ಲೂಸ್
  2. ಮಿನುಸು
  3. ಫಲಿತಾಂಶಗಳು
  4. ನಂತರದ

ಪ್ಲೂಸ್

ರೆಸ್ಪಾನ್ಸಿವ್ ಬೆಂಬಲ

ನಾನು ಪ್ರಾಯೋಗಿಕ ಕೀಲಿಯನ್ನು ವಿನಂತಿಸಿದೆ ಮತ್ತು ಅವರು ಅದೇ ದಿನ ಅದನ್ನು ನನಗೆ ಕಳುಹಿಸಿದ್ದಾರೆ.

ಸಾಕಷ್ಟು ಸ್ಪಷ್ಟವಾದ ದಾಖಲಾತಿ

ನಾವು ಯಾವುದೇ ಸಮಸ್ಯೆಗಳಿಲ್ಲದೆ ವಿಶ್ಲೇಷಕವನ್ನು ಪ್ರಾರಂಭಿಸಲು ನಿರ್ವಹಿಸುತ್ತಿದ್ದೇವೆ. ಕನ್ಸೋಲ್ ಆಜ್ಞೆಗಳಿಗೆ ಸಹಾಯ ಸಹ ಲಭ್ಯವಿದೆ (ಇಲ್ಲಿ ಕೆಲವು ದೂರುಗಳಿದ್ದರೂ, ವಿಭಾಗವನ್ನು ನೋಡಿ ಮಿನುಸು).

ಬಹು-ಥ್ರೆಡ್ ವಿಶ್ಲೇಷಣೆಯ ಸಾಧ್ಯತೆ

ವಿಶ್ಲೇಷಕವು "ಪ್ರಮಾಣಿತ" ಆಯ್ಕೆಯನ್ನು ಹೊಂದಿದೆ -j, ಹಲವಾರು ಕಾರ್ಯಗಳಲ್ಲಿ ಸಮಾನಾಂತರವಾಗಿ ವಿಶ್ಲೇಷಣೆಯನ್ನು ಕೈಗೊಳ್ಳಲು ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ. ಇದರಿಂದ ಸಾಕಷ್ಟು ಸಮಯ ಉಳಿತಾಯವಾಗುತ್ತದೆ.

ಉತ್ತಮ ದೃಶ್ಯೀಕರಣ

ಪಠ್ಯದಿಂದ ಸಣ್ಣ ವೆಬ್ ಮೂತಿಗೆ ಹಲವು ವಿಭಿನ್ನ ಔಟ್‌ಪುಟ್ ಫಾರ್ಮ್ಯಾಟ್‌ಗಳು. ವೆಬ್ ಇಂಟರ್ಫೇಸ್ ಅನುಕೂಲಕರವಾಗಿದೆ, ಸಂಕ್ಷಿಪ್ತವಾಗಿದೆ, ಕೋಡ್‌ನಲ್ಲಿನ ಸಾಲುಗಳ ಪಕ್ಕದಲ್ಲಿ ಸುಳಿವುಗಳು ಮತ್ತು ರೋಗನಿರ್ಣಯದ ವಿವರಣೆಗಳಿಗೆ ಲಿಂಕ್‌ಗಳು.

ಅಸೆಂಬ್ಲಿಯಲ್ಲಿ ಸುಲಭವಾದ ಏಕೀಕರಣ

ಎಲ್ಲಾ ದಸ್ತಾವೇಜನ್ನು ಅವರ ವೆಬ್‌ಸೈಟ್‌ನಲ್ಲಿದೆ, ನಿಮ್ಮ ಯೋಜನೆಯನ್ನು CMake ಬಳಸಿ ನಿರ್ಮಿಸಿದ್ದರೆ, ಎಲ್ಲವೂ ತುಂಬಾ ಸರಳವಾಗಿದೆ ಎಂದು ನಾನು ಹೇಳಬಲ್ಲೆ.

ಉತ್ತಮ ರೋಗನಿರ್ಣಯದ ವಿವರಣೆಗಳು

ನೀವು ಮೋಡ್‌ನಲ್ಲಿ ಔಟ್‌ಪುಟ್ ಅನ್ನು ರಚಿಸಿದರೆ fullhtml, ನಂತರ ಪ್ರತಿ ಸಂದೇಶವು ವಿವರಣೆಗಳು, ಕೋಡ್ ಉದಾಹರಣೆಗಳು ಮತ್ತು ಹೆಚ್ಚುವರಿ ಲಿಂಕ್‌ಗಳೊಂದಿಗೆ ರೋಗನಿರ್ಣಯದ ವಿವರಣೆಗೆ ಲಿಂಕ್ ಅನ್ನು ಹೊಂದಿರುತ್ತದೆ.

ಮಿನುಸು

ವಿಶ್ಲೇಷಕದಿಂದ C++ ಭಾಷೆಯ ಅಜ್ಞಾನ

ದುರದೃಷ್ಟವಶಾತ್, PVS ಕೆಲವೊಮ್ಮೆ ಸಿಂಟ್ಯಾಕ್ಸ್ ದೋಷಗಳನ್ನು ಮಾಡುತ್ತದೆ ಮತ್ತು ಕೋಡ್ ಸಂಪೂರ್ಣವಾಗಿ ಸರಿಯಾಗಿದ್ದಾಗ ತಪ್ಪು ಧನಾತ್ಮಕ ಸಂದೇಶಗಳನ್ನು ಉತ್ಪಾದಿಸುತ್ತದೆ.

ಉದಾಹರಣೆಗೆ, ಹಿಂತಿರುಗಿಸುವ ಒಂದು ಕಾರ್ಯವಿದೆ void:

template <typename T>
auto copy (const void * source, void * destination)
    ->
        std::enable_if_t
        <
            std::is_copy_constructible<T>::value
        >
{
    new (destination) T(*static_cast<const T *>(source));
}

ಹೌದು ಮುಖ್ಯ ಪದ auto ಅರ್ಥೈಸಬಹುದು void, ಅದಕ್ಕಾಗಿ ಅದು ಇಲ್ಲಿದೆ ಕಾರು. ಆದರೆ PVS ಈ ಕೆಳಗಿನ ಸಂದೇಶಗಳನ್ನು ತಯಾರಿಸಿದೆ:

dynamic_tuple_management.hpp:29:1: error: V591 Non-void function should return a value.
dynamic_tuple_management.hpp:29:1: error: V2542 Function with a non-void return type should return a value from all exit paths.

ತುಂಬಾ ನಿಧಾನವಾದ ಸೈಟ್

ಹೌದು, ಪ್ರತಿ ಸಂದೇಶದ ಪಕ್ಕದಲ್ಲಿರುವ ವೆಬ್ ಇಂಟರ್ಫೇಸ್‌ನಲ್ಲಿ ಉದಾಹರಣೆಗಳೊಂದಿಗೆ ಅನುಗುಣವಾದ ರೋಗನಿರ್ಣಯದ ವಿವರಣೆಗೆ ಲಿಂಕ್ ಇದೆ. ಆದರೆ ನೀವು ಲಿಂಕ್ ಅನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿದಾಗ, ನೀವು ಸಾಕಷ್ಟು ಸಮಯ ಕಾಯಬೇಕಾಗುತ್ತದೆ, ಮತ್ತು ಕೆಲವೊಮ್ಮೆ ಅದು ಸಂಭವಿಸುತ್ತದೆ 504 ಗೇಟ್‌ವೇ ಸಮಯ ಮೀರಿದೆ.

ಭಾಷೆ

ಎಲ್ಲಾ ವಿವರಣೆಗಳು ರಷ್ಯನ್ ಭಾಷೆಯಲ್ಲಿವೆ, ಅದು ಅದ್ಭುತವಾಗಿದೆ. ಆದರೆ ವರದಿಯ ಲಿಂಕ್‌ಗಳು ಯಾವಾಗಲೂ ಇಂಗ್ಲಿಷ್ ಆವೃತ್ತಿಗೆ ಕಾರಣವಾಗುತ್ತವೆ. ಭಾಷೆಯನ್ನು ಬದಲಾಯಿಸಲು ಸಾಧ್ಯವಾಗುವುದು ಒಳ್ಳೆಯದು ಇದರಿಂದ ನೀವು ರಷ್ಯನ್ ಭಾಷೆಯಲ್ಲಿ ತಕ್ಷಣವೇ ಡಯಾಗ್ನೋಸ್ಟಿಕ್ಸ್ ಅನ್ನು ವೀಕ್ಷಿಸಬಹುದು. ಇಂಟರ್ಫೇಸ್ನಲ್ಲಿ ನಾನು ಅಂತಹ ಆಯ್ಕೆಯನ್ನು ಕಂಡುಹಿಡಿಯಲಿಲ್ಲ.

ಕನ್ಸೋಲ್ ಮೂಲಕ ರೋಗನಿರ್ಣಯದ ಮಟ್ಟಗಳೊಂದಿಗೆ ಕೆಲಸ ಮಾಡಲು ಇದು ಅನಾನುಕೂಲವಾಗಿದೆ

ಎರಡು ಆಜ್ಞೆಗಳನ್ನು ಬಳಸಿದ ಸಂಗತಿಯೊಂದಿಗೆ ಪ್ರಾರಂಭಿಸೋಣ (ಇದು pvs-studio-analyzer и plog-converter) ರೋಗನಿರ್ಣಯವನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸಲು ವಿವಿಧ ಸ್ವರೂಪಗಳು.

ಗಾಗಿ ಸಹಾಯ pvs-studio-analyzer ಓದುತ್ತದೆ:

-a [MODE], --analysis-mode [MODE]
    MODE defines the type of warnings:
    1 - 64-bit errors;
    2 - reserved;
    4 - General Analysis;
    8 - Micro-optimizations;
    16 - Customers Specific Requests;
    32 - MISRA.
    Modes can be combined by adding the values
    Default: 4

ಎಲ್ಲಿಗೆ ಹೋಗಬೇಕೆಂದು ಯೋಚಿಸಲು ನಾನು ಬಹಳ ಸಮಯ ಕಳೆದಿದ್ದೇನೆ ಸೇರಿಸಿ ("ಮೌಲ್ಯಗಳನ್ನು ಸೇರಿಸುವುದು") ಕೀಗಳು. ನಾನು ಅವುಗಳನ್ನು ಅಲ್ಪವಿರಾಮದಿಂದ ಪ್ರತ್ಯೇಕಿಸಿ ಪಟ್ಟಿ ಮಾಡಲು ಪ್ರಯತ್ನಿಸಿದೆ:

pvs-studio-analyzer analyze ... -a 1,4,16

ನಾನು ಕೀಲಿಯನ್ನು ಹಲವಾರು ಬಾರಿ ನೋಂದಾಯಿಸಲು ಪ್ರಯತ್ನಿಸಿದೆ:

pvs-studio-analyzer analyze ... -a 1 -a 4 -a 16

ಮತ್ತು ಆಗ ಮಾತ್ರ ಇವು ಬಿಟ್ ಮುಖವಾಡಗಳು ಎಂದು ನಾನು ಅರಿತುಕೊಂಡೆ! ಮತ್ತು ನಿಮಗೆ ಬೇಕು ಒಟ್ಟುಮತ್ತು ಅಲ್ಲ ಸೇರಿಸಿ ಅರ್ಥಗಳು. ಉದಾಹರಣೆಗೆ, ಸಾಮಾನ್ಯ ರೋಗನಿರ್ಣಯ, ಮೈಕ್ರೋ-ಆಪ್ಟಿಮೈಸೇಶನ್‌ಗಳು ಮತ್ತು MISRA ಗಾಗಿ ರೋಗನಿರ್ಣಯವನ್ನು ಪಡೆಯಲು, ನೀವು ಅವುಗಳನ್ನು ಒಟ್ಟುಗೂಡಿಸಬೇಕಾಗಿದೆ (4 + 8 + 32 = 44):

pvs-studio-analyzer analyze ... -a 44

ಬಳಕೆದಾರ ಇಂಟರ್‌ಫೇಸ್‌ಗಳಲ್ಲಿ ಬಿಟ್‌ಮಾಸ್ಕ್‌ಗಳನ್ನು ಬಳಸುವುದು ಸಾಮಾನ್ಯವಾಗಿ ಕೆಟ್ಟ ರೂಪವಾಗಿದೆ. ಇದೆಲ್ಲವನ್ನೂ ಆಂತರಿಕವಾಗಿ ಸಂಕ್ಷಿಪ್ತಗೊಳಿಸಬಹುದು ಮತ್ತು ಬಳಕೆದಾರರಿಗೆ ಧ್ವಜಗಳ ಗುಂಪನ್ನು ಹೊಂದಿಸಬಹುದು.

ಇದರ ಜೊತೆಗೆ, ಒಂದು ಉಪಯುಕ್ತತೆಯೂ ಇದೆ plog-converter, ಇದು ಮಾನವ-ಓದಬಲ್ಲ ಸ್ಥಿರ ವಿಶ್ಲೇಷಣೆ ಮಾಹಿತಿಯನ್ನು ಉತ್ಪಾದಿಸುತ್ತದೆ. ಆಕೆಗೆ ಇತರ ಸಮಸ್ಯೆಗಳಿವೆ.

ಕಾರ್ಯಕ್ರಮಕ್ಕೆ ಸಹಾಯ plog-converter ವರದಿಗಳು:

-a, --analyzer            Specifies analyzer(s) and level(s) to be
                          used for filtering, i.e.
                          'GA:1,2;64:1;OP:1,2,3;CS:1;MISRA:1,2'
                          Default: GA:1,2

ಮೊದಲು ಇಲ್ಲದಿರುವ ಕೆಲವು "ಮಟ್ಟಗಳು" ಇಲ್ಲಿ ಕಾಣಿಸಿಕೊಂಡಿವೆ ಮತ್ತು ದಸ್ತಾವೇಜನ್ನು ನಾನು ಅವುಗಳ ಬಗ್ಗೆ ಏನನ್ನೂ ಕಂಡುಹಿಡಿಯಲಿಲ್ಲ.

ಸಾಮಾನ್ಯವಾಗಿ, ಇದು ಸ್ಪಷ್ಟವಾಗಿಲ್ಲ. ಅದಕ್ಕಾಗಿಯೇ ನಾನು ಎಲ್ಲವನ್ನೂ ಗರಿಷ್ಠವಾಗಿ ಹೊಂದಿಸಿದ್ದೇನೆ.

ಕ್ಯಾಚ್‌ನಲ್ಲಿ ಸ್ಟುಪಿಡ್ ಶಪಥಗಳ ಗುಂಪೇ

ನಾನು ವಿಶ್ಲೇಷಿಸಿದ ಮೂರು ಯೋಜನೆಗಳಲ್ಲಿ ಎರಡು ಯುನಿಟ್ ಟೆಸ್ಟಿಂಗ್ ಲೈಬ್ರರಿಯನ್ನು ಬಳಸುತ್ತವೆ ಕ್ಯಾಚ್ಎಕ್ಸ್ಎನ್ಎಮ್ಎಕ್ಸ್. ಮತ್ತು ಸಂದೇಶಗಳ ಸಿಂಹ ಪಾಲು (!!! ಒಂದರಲ್ಲಿ 90 ರಲ್ಲಿ 138 ಮತ್ತು ಇನ್ನೊಂದರಲ್ಲಿ 297 ರಲ್ಲಿ 344 !!!) ಈ ಕೆಳಗಿನ ರೂಪವನ್ನು ಹೊಂದಿದೆ:

PVS-ಸ್ಟುಡಿಯೊದ ಸ್ವತಂತ್ರ ವಿಮರ್ಶೆ (Linux, C++)

ಮಲ್ಟಿಥ್ರೆಡಿಂಗ್ ಅನ್ನು ಗಣನೆಗೆ ತೆಗೆದುಕೊಳ್ಳುವುದಿಲ್ಲ

ಬದಲಾಗದ ಅಸ್ಥಿರಗಳು ಅಥವಾ ಅಂತ್ಯವಿಲ್ಲದ ಲೂಪ್‌ಗಳ ಬಗ್ಗೆ ಅನೇಕ ತಪ್ಪು ಧನಾತ್ಮಕ ಅಂಶಗಳಿವೆ, ಆದರೆ ಈ ಅಸ್ಥಿರಗಳೊಂದಿಗಿನ ಕೆಲಸವು ವಿಭಿನ್ನ ಎಳೆಗಳಿಂದ ಸಂಭವಿಸುತ್ತದೆ ಮತ್ತು ಇದು ಹಾಗಲ್ಲದಿದ್ದರೆ, ಘಟಕ ಪರೀಕ್ಷೆಗಳು ಕಾರ್ಯನಿರ್ವಹಿಸುವುದಿಲ್ಲ.

PVS-ಸ್ಟುಡಿಯೊದ ಸ್ವತಂತ್ರ ವಿಮರ್ಶೆ (Linux, C++)

ಆದಾಗ್ಯೂ, ಸ್ಥಿರ ವಿಶ್ಲೇಷಕವು ಇದನ್ನು ಗಣನೆಗೆ ತೆಗೆದುಕೊಳ್ಳಬಹುದೇ? ಗೊತ್ತಿಲ್ಲ.

ಫಲಿತಾಂಶಗಳು

ನನ್ನ ಓಪನ್ ಸೋರ್ಸ್ ಪ್ರಾಜೆಕ್ಟ್‌ಗಳಲ್ಲಿ PVS ಯಾವುದೇ ನೈಜ ದೋಷಗಳನ್ನು ಕಂಡುಹಿಡಿಯಲಿಲ್ಲ ಬರ್ಸ್ಟ್ и ಪ್ರಾಕ್ಸಿಮಾ, ಹಾಗೆಯೇ ಕೆಲಸದ ಡ್ರಾಫ್ಟ್‌ನಲ್ಲಿ, ಸ್ಪಷ್ಟ ಕಾರಣಗಳಿಗಾಗಿ, ನಾನು ಪ್ರಸ್ತುತಪಡಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ನಿಜ, ಕೆಲವು ನ್ಯೂನತೆಗಳನ್ನು ಈಗಾಗಲೇ ಹಿಡಿಯಲಾಗಿದೆ ಮತ್ತು ಮೊದಲೇ ಬಳಸಿ ಸರಿಪಡಿಸಲಾಗಿದೆ ಎಂದು ನೆನಪಿನಲ್ಲಿಟ್ಟುಕೊಳ್ಳುವುದು ಯೋಗ್ಯವಾಗಿದೆ Cppcheck и scan-build.

ಸಾಮಾನ್ಯವಾಗಿ, ಈ ಎಲ್ಲಾ ವಿಶ್ಲೇಷಕಗಳ ಅನಿಸಿಕೆ ಸರಿಸುಮಾರು ಒಂದೇ ಆಗಿರುತ್ತದೆ: ಹೌದು, ಅವರು ಏನನ್ನಾದರೂ ಹಿಡಿಯುತ್ತಾರೆ, ಕೆಲವೊಮ್ಮೆ ಮುಖ್ಯವಾದುದನ್ನೂ ಸಹ, ಆದರೆ ಒಟ್ಟಾರೆಯಾಗಿ ಕಂಪೈಲರ್ ಸಾಕು.

ಇದು ಸಾಧ್ಯ (ಮತ್ತು ನಾನು ವೈಯಕ್ತಿಕವಾಗಿ ಹಾಗೆ ಯೋಚಿಸಲು ಇಷ್ಟಪಡುತ್ತೇನೆ) ನಮ್ಮ ತಂಡವು ಸಾಫ್ಟ್‌ವೇರ್ ಡೆವಲಪ್‌ಮೆಂಟ್ ಅಭ್ಯಾಸಗಳನ್ನು ಬಳಸುತ್ತದೆ ಅದು ನಮಗೆ ಕನಿಷ್ಟ ಪ್ರಮಾಣದ ಶಿಟ್ಟಿ ಕೋಡ್ ಅನ್ನು ರಚಿಸಲು ಅನುಮತಿಸುತ್ತದೆ. ಅವುಗಳನ್ನು ವೀರೋಚಿತವಾಗಿ ಜಯಿಸುವುದಕ್ಕಿಂತ ಸಮಸ್ಯೆಗಳನ್ನು ಸೃಷ್ಟಿಸದಿರುವುದು ಉತ್ತಮ.

ಆದ್ದರಿಂದ, ಯಾರೊಬ್ಬರ ಕಾಲುಗಳನ್ನು ಗುಂಡು ಹಾರಿಸದಂತೆ ಅಥವಾ ಯಾರೊಬ್ಬರ ಹಣೆಗೆ ಕುಂಟೆಯಿಂದ ಹೊಡೆಯದಂತೆ C++ ನಲ್ಲಿ ಬರೆಯುವುದು ಹೇಗೆ ಎಂಬುದರ ಕುರಿತು ಕೆಲವು ಸಲಹೆಗಳನ್ನು ನೀಡುವ ಸ್ವಾತಂತ್ರ್ಯವನ್ನು ನಾನು ತೆಗೆದುಕೊಳ್ಳುತ್ತೇನೆ.

ಕಂಪೈಲರ್ ಡಯಾಗ್ನೋಸ್ಟಿಕ್ಸ್‌ನ ಹೆಚ್ಚಿನದನ್ನು ಮಾಡಿ

ನಮ್ಮ ತಂಡವು ಈ ಕೆಳಗಿನ ಸಂಕಲನ ಆಯ್ಕೆಗಳನ್ನು ಬಳಸುತ್ತದೆ (ಮತ್ತು ನಿಮಗೆ ಸಲಹೆ ನೀಡುತ್ತದೆ):

-Werror

-Wall
-Wextra
-Wpedantic

-Wcast-align
-Wcast-qual
-Wconversion
-Wctor-dtor-privacy
-Wenum-compare
-Wfloat-equal
-Wnon-virtual-dtor
-Wold-style-cast
-Woverloaded-virtual
-Wredundant-decls
-Wsign-conversion
-Wsign-promo

ನಿಮ್ಮ ಪ್ರಾಜೆಕ್ಟ್‌ನಲ್ಲಿ ಅವುಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ ಮತ್ತು ನಿಮ್ಮ ಕೋಡ್ ಕುರಿತು ಸಾಕಷ್ಟು ತಿಳಿದುಕೊಳ್ಳಿ.

ಮಾನದಂಡಕ್ಕೆ ಅಂಟಿಕೊಳ್ಳಿ

ಸ್ಟ್ಯಾಂಡರ್ಡ್ ಅನಲಾಗ್‌ಗಳಿದ್ದಲ್ಲಿ ಪ್ಲಾಟ್‌ಫಾರ್ಮ್-ಅವಲಂಬಿತ ವಿಷಯಗಳನ್ನು ಬಳಸದಿರಲು ಪ್ರಯತ್ನಿಸಿ, ಮತ್ತು ಅವುಗಳಿಲ್ಲದೆ ನೀವು ಸಂಪೂರ್ಣವಾಗಿ ಮಾಡಲು ಸಾಧ್ಯವಾಗದಿದ್ದರೆ, ಅವುಗಳನ್ನು ಮ್ಯಾಕ್ರೋಗಳಿಗಾಗಿ (ಅಥವಾ ಬೇರೆ ಯಾವುದಾದರೂ) ವಿಶೇಷ ಬ್ಲಾಕ್‌ಗಳಲ್ಲಿ ಸುತ್ತಿ ಮತ್ತು ಬೆಂಬಲವಿಲ್ಲದ ಪರಿಸ್ಥಿತಿಗಳಲ್ಲಿ ನಿಮ್ಮ ಕೋಡ್ ಅನ್ನು ಸಂಕಲಿಸಲು ಬಿಡಬೇಡಿ.

ಸ್ಟ್ಯಾಂಡರ್ಡ್ ಆಪರೇಷನ್ ಸೆಮ್ಯಾಂಟಿಕ್ಸ್ಗೆ ಅಂಟಿಕೊಳ್ಳಿ

ಸಂಕಲನವು ಸಂಕಲನವಾಗಿರಬೇಕು, ಗುಣಾಕಾರವು ಗುಣಾಕಾರವಾಗಿರಬೇಕು, ಕಾರ್ಯದ ಕರೆಯು ಕಾರ್ಯದ ಕರೆಯಾಗಿರಬೇಕು, ನಕಲು ನಕಲು ಆಗಿರಬೇಕು, ಒಯ್ಯಬೇಕು ಒಯ್ಯಬೇಕು, ಕಂಟೇನರ್ ಪುನರಾವರ್ತನೀಯವಾಗಿರಬೇಕು, ಪುನರಾವರ್ತಕವು ಪ್ರಚಾರವನ್ನು ಹೊಂದಿರಬೇಕು ++ ಮತ್ತು ಡಿಫರೆನ್ಸಿಂಗ್ *. ಮತ್ತು ಹೀಗೆ.

ಕಲ್ಪನೆಯು ಸ್ಪಷ್ಟವಾಗಿದೆ ಎಂದು ನಾನು ಭಾವಿಸುತ್ತೇನೆ. ಸ್ಥಾಪಿತವಾದ ಸಂಪ್ರದಾಯಗಳು ಬೈಂಡಿಂಗ್ ಅಲ್ಲ, ಆದರೆ ನಿಮ್ಮ ಕೋಡ್‌ನ ಎಲ್ಲಾ ಬಳಕೆದಾರರು ಮತ್ತು ಓದುಗರು ನೋಡಲು ನಿರೀಕ್ಷಿಸುತ್ತಾರೆ. ಇತರರನ್ನು ಮೀರಿಸಲು ಪ್ರಯತ್ನಿಸಬೇಡಿ, ಇಲ್ಲದಿದ್ದರೆ ನೀವು ನಿಮ್ಮನ್ನು ಮೀರಿಸುತ್ತೀರಿ.

ಹೊಂದಾಣಿಕೆಯ ಕೋಡ್ ಬರೆಯಿರಿ

ಮೊದಲನೆಯದಾಗಿ, ನನ್ನ ಪ್ರಕಾರ ಪ್ರಮಾಣಿತ ಗ್ರಂಥಾಲಯ. ನಿಮ್ಮ ತರಗತಿಗಳು ಮತ್ತು ಕಾರ್ಯಗಳ ಇಂಟರ್‌ಫೇಸ್‌ಗಳನ್ನು ಪ್ರಮಾಣಿತ ಮತ್ತು ಇತರ ಲೈಬ್ರರಿಗಳೊಂದಿಗೆ ಬಳಸಬಹುದು (ಉದಾಹರಣೆಗೆ, ಬೂಸ್ಟ್) ಇದು ಹೆಚ್ಚು ಅಪೇಕ್ಷಣೀಯವಾಗಿದೆ.

STL ಮತ್ತು ಬೂಸ್ಟ್ ಇಂಟರ್ಫೇಸ್‌ಗಳನ್ನು ನೋಡಲು ಹಿಂಜರಿಯಬೇಡಿ. ಅಪರೂಪದ ವಿನಾಯಿತಿಗಳೊಂದಿಗೆ, ನೀವು ಅಲ್ಲಿ ಯೋಗ್ಯವಾದ ಮಾದರಿಯನ್ನು ನೋಡುತ್ತೀರಿ.

ಓಪನ್ ಸೋರ್ಸ್ ಪರಿಕರಗಳ ಹೆಚ್ಚಿನದನ್ನು ಮಾಡಿ

ಅದೇ ಸ್ಥಿರ ವಿಶ್ಲೇಷಣೆಗಾಗಿ, CMake ಬಿಲ್ಡ್ ಸಿಸ್ಟಮ್‌ನೊಂದಿಗೆ ಯಾವುದೇ ಯೋಜನೆಗೆ ಒಮ್ಮೆ ಸಂಪರ್ಕಿಸಬಹುದಾದ ಕನಿಷ್ಠ ಎರಡು ಮುಕ್ತ ಉಚಿತ ಪರಿಕರಗಳಿವೆ.

ನನ್ನ ಇತ್ತೀಚಿನ ಪ್ರಕಟಣೆಯಲ್ಲಿ ನೀವು ಇದರ ಬಗ್ಗೆ ಇನ್ನಷ್ಟು ಓದಬಹುದು.

ನಂತರದ

ಅಂತಿಮವಾಗಿ, ನಾನು PVS ಅಥವಾ ಯಾವುದೇ ಇತರ ಸ್ಥಿರ ವಿಶ್ಲೇಷಕಗಳನ್ನು ಬಳಸದಂತೆ ಪ್ರತಿಪಾದಿಸುತ್ತಿಲ್ಲ ಎಂದು ಒತ್ತಿಹೇಳಲು ಬಯಸುತ್ತೇನೆ. ಆದರೆ ಸ್ಥಿರ ವಿಶ್ಲೇಷಕವು ನಿಮ್ಮ ಕೋಡ್‌ನಲ್ಲಿ ಗಮನಾರ್ಹ ದೋಷಗಳನ್ನು ನಿರಂತರವಾಗಿ ಕಂಡುಕೊಳ್ಳುವುದು ಹೇಗೆ ಎಂದು ಯೋಚಿಸಲು ನಾನು ನಿಮ್ಮನ್ನು ಪ್ರೋತ್ಸಾಹಿಸುತ್ತೇನೆ.

ಇದು ಕೇವಲ ಪರಿಣಾಮವಾಗಿದೆ. ನಾವು ಕಾರಣವನ್ನು ಹುಡುಕಬೇಕು ಮತ್ತು ತೊಡೆದುಹಾಕಬೇಕು.

ಮೂಲ: www.habr.com

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ