GNU coding standards
ಗ್ನು ಕೋಡಿಂಗ್ ಮಾನದಂಡಗಳು ಗ್ನು ವ್ಯವಸ್ಥೆಯೊಳಗೆ ಸ್ಥಿರವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುವ ಪ್ರೋಗ್ರಾಂಗಳನ್ನು ಬರೆಯುವ ನಿಯಮಗಳು ಮತ್ತು ಮಾರ್ಗಸೂಚಿಗಳ ಒಂದು ಗುಂಪಾಗಿದೆ. ಜಿ. ಎನ್. ಯು ಕೋಡಿಂಗ್ ಮಾನದಂಡಗಳನ್ನು ರಿಚರ್ಡ್ ಸ್ಟಾಲ್ಮನ್ ಮತ್ತು ಇತರ ಜಿ. ಎನ್. ಯು ಪ್ರಾಜೆಕ್ಟ್ ಸ್ವಯಂಸೇವಕರು ಬರೆದಿದ್ದಾರೆ. ಮಾನದಂಡಗಳ ದಾಖಲೆಯು ಜಿ. ಎನ್. ಯು. ಯೋಜನೆಯ ಭಾಗವಾಗಿದೆ ಮತ್ತು ಜಿ. ಎನ್. ಯು. ಜಾಲತಾಣದಿಂದ ಲಭ್ಯವಿದೆ. ಇದು ಸಿಯಲ್ಲಿ ಗ್ನುಗಾಗಿ ಉಚಿತ ತಂತ್ರಾಂಶವನ್ನು ಬರೆಯುವುದರ ಮೇಲೆ ಕೇಂದ್ರೀಕರಿಸುತ್ತದೆಯಾದರೂ, ಅದರಲ್ಲಿ ಹೆಚ್ಚಿನದನ್ನು ಹೆಚ್ಚು ಸಾಮಾನ್ಯವಾಗಿ ಅನ್ವಯಿಸಬಹುದು. ನಿರ್ದಿಷ್ಟವಾಗಿ ಹೇಳುವುದಾದರೆ, ಗ್ನು ಪ್ರಾಜೆಕ್ಟ್ ತನ್ನ ಕೊಡುಗೆದಾರರನ್ನು ಯಾವಾಗಲೂ ಮಾನದಂಡಗಳನ್ನು ಅನುಸರಿಸಲು ಪ್ರಯತ್ನಿಸುವಂತೆ ಪ್ರೋತ್ಸಾಹಿಸುತ್ತದೆ-ಅವರ ಪ್ರೋಗ್ರಾಂಗಳನ್ನು ಸಿ ಕೋಡ್ ಫಾರ್ಮ್ಯಾಟಿಂಗ್ನಲ್ಲಿ ಕಾರ್ಯಗತಗೊಳಿಸಲಾಗಿದೆಯೆ ಅಥವಾ ಇಲ್ಲವೇ. ಇಲ್ಲಿ ಒಂದು ವಿಶಿಷ್ಟ ಉದಾಹರಣೆಯಾಗಿದೆಃ ಇಂಟ್ ಮೇನ್ (ಇಂಟ್ ಆರ್ಗ್ಸಿ, ಚಾರ್ * ಆರ್ಗ್ವಿ []) {ಸ್ಟ್ರಕ್ಟ್ ಗಿಜ್ಮೋ ಫೂ; fetch _ gizmo (& ಫೂ, ಆರ್ಗ್ವಿ [1]); ಪರಿಶೀಲಿಸಿಃ (foo.type = = ಮೂಮಿನ್) ಹಾಕಿದರೆ ("ಇದು ಮೂಮಿನ್ ಆಗಿದೆ. "); ಇಲ್ಲದಿದ್ದರೆ (foo.bar <GIZMO _ SNUFKIN _ ThRESHOLD/2 | | (ಎಸ್ಟ್ರಿಸಿಎಂಪಿ (foo.class_name", ಸ್ನೂಫ್ಕಿನ್ ") = = 0) & & foo.bar <GIZMO _ SNUFKIN _ ThRESHOLD) ಹಾಕಿದರೆ (" ಇದು ಸ್ನೂಫ್ಕಿನ್ ಆಗಿದೆ. "); ಇಲ್ಲದಿದ್ದರೆ {ಚಾರ್ * ಬಾರ್ನೆ;/* ಕಡತದ ಹೆಸರಿನ ಕೊನೆಯ ಕಡಿತದ ನಂತರ ಮೊದಲ ಅಕ್ಷರಕ್ಕೆ ಪಾಯಿಂಟರ್. */ಇಂಟ ವಿಲ್ಮಾ;/* ಬ್ರಹ್ಮಾಂಡದ ಅಂದಾಜು ಗಾತ್ರ. */int fred;/* 'ಬಾರ್' ಕ್ಷೇತ್ರದ ಗರಿಷ್ಠ ಮೌಲ್ಯ. */ಡು {ಫ್ರಾಬ್ನಿಕೇಟ್ (& ಫೂ, ಜಿಐಝ್ಮೋ _ ಸ್ನೂಫ್ಕಿನ್ _ ಥ್ರೆಶೋಲ್ಡ್, & ಬಾರ್ನೆ, & ವಿಲ್ಮಾ, & ಫ್ರೆಡ್); ಟ್ವಿಡಲ್ (& ಫೂ, ಬಾರ್ನೆ, ವಿಲ್ಮಾ + ಫ್ರೆಡ್);} ಆದರೆ (foo.bar = ಜಿಐಝ್ಮೋ _ ಸ್ನೂಫ್ಕಿನ್ _ ಥ್ರೆಶೋಲ್ಡ್); ಸ್ಟೋರ್ _ ಸೈಜ್ (ವಿಲ್ಮಾ); ಗೊಟೊ ಚೆಕ್;} ರಿಟರ್ನ್ 0;} ಬ್ಲಾಕ್ಗಳನ್ನು ಹೇಳಿಕೆಗಳಾಗಿ ಸ್ಥಿರವಾಗಿ ಪರಿಗಣಿಸುವುದು (ಇಂಡೆಂಟೇಶನ್ ಉದ್ದೇಶಕ್ಕಾಗಿ) ಗ್ನು ಸಿ ಕೋಡ್ ಫಾರ್ಮ್ಯಾಟಿಂಗ್ ಶೈಲಿಯ ಒಂದು ವಿಶಿಷ್ಟ ಲಕ್ಷಣವಾಗಿದೆ; ಇದು ಆವರಣದ ಮೊದಲು ಕಡ್ಡಾಯ ಸ್ಥಳವಾಗಿದೆ. ಜಿ. ಎನ್. ಯು ಶೈಲಿಯಲ್ಲಿ ವಿನ್ಯಾಸಗೊಳಿಸಲಾದ ಎಲ್ಲಾ ಕೋಡ್ಗಳು ಪ್ರತಿ ಮುಚ್ಚುವ ಬ್ರೇಸ್, ಬ್ರಾಕೆಟ್ ಅಥವಾ ಆವರಣವು ಅದರ ಅನುಗುಣವಾದ ಆರಂಭಿಕ ಡಿಲಿಮಿಟರ್ನ ಬಲಭಾಗದಲ್ಲಿ ಅಥವಾ ಅದೇ ಅಂಕಣದಲ್ಲಿ ಕಾಣಿಸಿಕೊಳ್ಳುವ ಗುಣವನ್ನು ಹೊಂದಿವೆ. ಸಾಮಾನ್ಯ ತತ್ವವಾಗಿ, ಗ್ನೂ ಇಮ್ಯಾಕ್ಸ್ ಅನ್ನು ಗ್ನೂ ಕೋಡ್ ಫಾರ್ಮ್ಯಾಟಿಂಗ್ ಶೈಲಿಯ ಮೇಲೆ ವಿಶ್ವಾಸಾರ್ಹ ಪ್ರಾಧಿಕಾರವೆಂದು ಪರಿಗಣಿಸಬಹುದು. ಅಂತೆಯೇ, ಇಮ್ಯಾಕ್ಸ್ನಿಂದ ಇಂಡೆಂಟ್ ಮಾಡಿದಾಗ ಕೊಳಕು ಕಾಣುವ ಯಾವುದೇ ಕೋಡ್ ಅನ್ನು ಹೆಚ್ಚು ಇಮ್ಯಾಕ್ಸ್-ಸ್ನೇಹಿ ರೂಪಕ್ಕೆ ಬದಲಾಯಿಸುವುದು ಅಪೇಕ್ಷಣೀಯವಾಗಿದೆ-ಉದಾಹರಣೆಗೆ, ಹೆಚ್ಚುವರಿ ಆವರಣಗಳನ್ನು ಸೇರಿಸುವ ಮೂಲಕ. ಉದ್ದನೆಯ ಸಾಲುಗಳನ್ನು ವಿಭಜಿಸುವುದು "ನೀವು ಒಂದು ಅಭಿವ್ಯಕ್ತಿಯನ್ನು ಅನೇಕ ಸಾಲುಗಳಾಗಿ ವಿಭಜಿಸಿದಾಗ, ಅದನ್ನು ಆಪರೇಟರ್ನ ಮುಂದೆ ವಿಭಜಿಸಿ, ಒಂದರ ನಂತರ ಅಲ್ಲ". ಉದಾಹರಣೆಗೆಃ ಇಫ್ (ಫೂ _ ದಿಸ್ _ ಈಸ್ _ ಲಾಂಗ್ & & ಬಾರ್> ವಿನ್ (x, y, z) & & ರೆಸ್ಟಿಂಗ್ _ ಕಂಡಿಷನ್) ಕಾಮೆಂಟ್ಗಳು ಮಾನದಂಡಗಳು ಇಂಗ್ಲಿಷ್ ಭಾಷೆಯ ಕಾಮೆಂಟ್ಗಳ ಮಹತ್ವವನ್ನು ಹೆಚ್ಚು ಒತ್ತಿಹೇಳುತ್ತವೆಃ ದಯವಿಟ್ಟು ಇಂಗ್ಲಿಷ್ನಲ್ಲಿ ಗ್ನೂ ಪ್ರೋಗ್ರಾಂನಲ್ಲಿ ಕಾಮೆಂಟ್ಗಳನ್ನು ಬರೆಯಿರಿ, ಏಕೆಂದರೆ ಇಂಗ್ಲಿಷ್ ಎಲ್ಲಾ ದೇಶಗಳಲ್ಲಿನ ಬಹುತೇಕ ಎಲ್ಲಾ ಪ್ರೋಗ್ರಾಮರ್ಗಳು ಓದಬಹುದಾದ ಒಂದು ಭಾಷೆಯಾಗಿದೆ. ನೀವು ಚೆನ್ನಾಗಿ ಇಂಗ್ಲಿಷ್ ಬರೆಯದಿದ್ದರೆ, ದಯವಿಟ್ಟು ನಿಮಗೆ ಸಾಧ್ಯವಾದಷ್ಟು ಇಂಗ್ಲಿಷ್ನಲ್ಲಿ ಕಾಮೆಂಟ್ಗಳನ್ನು ಬರೆಯಿರಿ, ನಂತರ ಅವುಗಳನ್ನು ಪುನಃ ಬರೆಯಲು ಸಹಾಯ ಮಾಡಲು ಇತರರನ್ನು ಕೇಳಿ. ನಿಮಗೆ ಇಂಗ್ಲಿಷ್ನಲ್ಲಿ ಕಾಮೆಂಟ್ಗಳನ್ನು ಬರೆಯಲು ಸಾಧ್ಯವಾಗದಿದ್ದರೆ, ದಯವಿಟ್ಟು ನಿಮ್ಮೊಂದಿಗೆ ಕೆಲಸ ಮಾಡಲು ಯಾರನ್ನಾದರೂ ಹುಡುಕಿ ಮತ್ತು ನಿಮ್ಮ ಕಾಮೆಂಟ್ಗಳನ್ನು ಇಂಗ್ಲಿಷ್ಗೆ ಭಾಷಾಂತರಿಸಿ. ಕಾಮೆಂಟ್ಗಳು ಸಂಪೂರ್ಣ, ದೊಡ್ಡಕ್ಷರದ ವಾಕ್ಯಗಳನ್ನು ಒಳಗೊಂಡಿರಬೇಕು, ಪ್ರತಿಯೊಂದೂ ಎರಡು ಸ್ಥಳಗಳನ್ನು ಅನುಸರಿಸಬೇಕು (ಇದರಿಂದಾಗಿ ಒಂದು ವಾಕ್ಯವು ಎಲ್ಲಿ ಕೊನೆಗೊಳ್ಳುತ್ತದೆ ಮತ್ತು ಮುಂದಿನದು ಎಲ್ಲಿ ಪ್ರಾರಂಭವಾಗುತ್ತದೆ ಎಂಬುದನ್ನು ಇಮ್ಯಾಕ್ಸ್ ಹೇಳಬಹುದು). ದೀರ್ಘ ಅಥವಾ ಸಂಕೀರ್ಣ ಪ್ರಿಪ್ರೊಸೆಸರ್ ಷರತ್ತುಗಳಿಗೆ, ಪ್ರತಿ #else ಮತ್ತು #endif ಕೆಳಗಿನ ಕೋಡ್ (#else ಗಾಗಿ) ಅಥವಾ ಮೇಲಿನ (#endif ಗಾಗಿ) ಸ್ಥಿತಿಯನ್ನು ವಿವರಿಸುವ ಕಾಮೆಂಟ್ ಅನ್ನು ಹೊಂದಿರಬೇಕು. ಕಡತಗಳು/usr ಮತ್ತು/ಇತ್ಯಾದಿಗಳನ್ನು ಓದಲು ಮಾತ್ರ ಅಳವಡಿಸಿದಾಗ ಎಲ್ಲಾ ಪ್ರೋಗ್ರಾಂಗಳು ಕಾರ್ಯನಿರ್ವಹಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತದೆ ಎಂದು ಮಾನದಂಡಗಳು ಬಯಸುತ್ತವೆ. ಆದ್ದರಿಂದ, ಆಂತರಿಕ ಉದ್ದೇಶಗಳಿಗಾಗಿ ಮಾರ್ಪಡಿಸಲಾದ ಕಡತಗಳು (ಲಾಗ್ ಕಡತಗಳು, ಲಾಕ್ ಕಡತಗಳು, ತಾತ್ಕಾಲಿಕ ಕಡತಗಳು, ಇತ್ಯಾದಿ) ಇದನ್ನು/ಯು. ಎಸ್. ಆರ್. ಅಥವಾ/ಇತ್ಯಾದಿಗಳಲ್ಲಿ ಸಂಗ್ರಹಿಸಬಾರದು. ಸಿಸ್ಟಮ್ ಕಾನ್ಫಿಗರೇಶನ್ ಕಡತಗಳನ್ನು/ಇತ್ಯಾದಿಗಳಲ್ಲಿ ನವೀಕರಿಸುವ ಪ್ರೋಗ್ರಾಂಗಳಿಗೆ ಒಂದು ವಿನಾಯಿತಿಯನ್ನು ಮಾಡಲಾಗಿದೆ. ಒಂದೇ ಕೋಶದಲ್ಲಿರುವ ಕಡತವನ್ನು ಮಾರ್ಪಡಿಸಲು ಬಳಕೆದಾರರು ಸ್ಪಷ್ಟವಾಗಿ ಕೇಳಿದಾಗ ಕೋಶದಲ್ಲಿ ಕಡತಗಳನ್ನು ಸಂಗ್ರಹಿಸಲು ಮತ್ತೊಂದು ವಿನಾಯಿತಿಯನ್ನು ನೀಡಲಾಗುತ್ತದೆ. ಪೋರ್ಟಬಿಲಿಟಿ ಗ್ನು ಕೋಡಿಂಗ್ ಸ್ಟ್ಯಾಂಡರ್ಡ್ಸ್ ಪೋರ್ಟಬಿಲಿಟಿ ಸಮಸ್ಯೆಯನ್ನು ಈ ರೀತಿ ವ್ಯಾಖ್ಯಾನಿಸುತ್ತದೆಃ ಯುನಿಕ್ಸ್ ಜಗತ್ತಿನಲ್ಲಿ ಪೋರ್ಟಬಿಲಿಟಿ ಎಂದರೆ 'ಯುನಿಕ್ಸ್ಗಳ ನಡುವೆ'; ಗ್ನು ಪ್ರೋಗ್ರಾಂನಲ್ಲಿ ಈ ರೀತಿಯ ಪೋರ್ಟಬಿಲಿಟಿ ಅಪೇಕ್ಷಣೀಯವಾಗಿದೆ, ಆದರೆ ಮುಖ್ಯವಲ್ಲ. ಮಾನದಂಡದ ಪ್ರಕಾರ, ಪೋರ್ಟಬಿಲಿಟಿ ಸಮಸ್ಯೆಗಳು ಬಹಳ ಸೀಮಿತವಾಗಿವೆ, ಏಕೆಂದರೆ ಗ್ನು ಪ್ರೋಗ್ರಾಂಗಳನ್ನು ಒಂದು ಕಂಪೈಲರ್, ಗ್ನು ಸಿ ಕಂಪೈಲರ್ನೊಂದಿಗೆ ಕಂಪೈಲ್ ಮಾಡಲು ವಿನ್ಯಾಸಗೊಳಿಸಲಾಗಿದೆ ಮತ್ತು ಕೇವಲ ಒಂದು ಸಿಸ್ಟಮ್ನಲ್ಲಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ, ಅದು ಗ್ನು ಸಿಸ್ಟಮ್ ಆಗಿದೆ. ಆದಾಗ್ಯೂ ಒಯ್ಯುವಿಕೆಯ ಸಮಸ್ಯೆಯ ಒಂದು ರೂಪವಿದೆ, ಮತ್ತು ಅದು ಒಂದು ಪ್ರೋಗ್ರಾಂ ವಿವಿಧ ಸಿಪಿಯು ಪ್ರಕಾರಗಳಲ್ಲಿ ಕಾರ್ಯನಿರ್ವಹಿಸಬೇಕು ಎಂದು ಮಾನದಂಡವು ಸ್ಪಷ್ಟಪಡಿಸುತ್ತದೆ. ಗ್ನೂ 16-ಬಿಟ್ ವ್ಯವಸ್ಥೆಗಳನ್ನು ಬೆಂಬಲಿಸುವುದಿಲ್ಲ ಮತ್ತು ಬೆಂಬಲಿಸುವುದಿಲ್ಲ ಎಂದು ಮಾನದಂಡವು ಹೇಳುತ್ತದೆ, ಆದರೆ ಎಲ್ಲಾ ವಿಭಿನ್ನ 32-ಮತ್ತು 64-ಬಿಟ್ ವ್ಯವಸ್ಥೆಗಳನ್ನು ನಿರ್ವಹಿಸುವುದು ಸಂಪೂರ್ಣವಾಗಿ ಅಗತ್ಯವಾಗಿದೆ. ವಿಮರ್ಶೆ ಗ್ನೂ ಕೋಡಿಂಗ್ ಮಾನದಂಡಗಳನ್ನು ಪ್ರಾಥಮಿಕವಾಗಿ ಗ್ನೂ ಯೋಜನೆಗಳು ಬಳಸುತ್ತವೆ, ಆದರೂ ಅದರ ಬಳಕೆಯು ಕೇವಲ ಗ್ನೂ ಯೋಜನೆಗಳಿಗೆ ಸೀಮಿತವಾಗಿಲ್ಲ. ಲಿನಕ್ಸ್ ಕರ್ನಲ್ ಕರ್ನಲ್ ಕೋಡ್ಗಾಗಿ ಈ ಶೈಲಿಯನ್ನು ಬಲವಾಗಿ ನಿರುತ್ಸಾಹಗೊಳಿಸುತ್ತದೆ ಮತ್ತು ಶೈಲಿಯನ್ನು ಅವಮಾನಕರವಾಗಿ ಉಲ್ಲೇಖಿಸುತ್ತದೆಃ "ಮೊದಲನೆಯದಾಗಿ, ನಾನು ಗ್ನೂ ಕೋಡಿಂಗ್ ಮಾನದಂಡಗಳ ನಕಲನ್ನು ಮುದ್ರಿಸಲು ಸೂಚಿಸುತ್ತೇನೆ, ಮತ್ತು ಅದನ್ನು ಓದಬೇಡಿ. ಅವುಗಳನ್ನು ಸುಟ್ಟುಬಿಡಿ, ಇದು ಒಂದು ದೊಡ್ಡ ಸಾಂಕೇತಿಕ ಸೂಚಕವಾಗಿದೆ ". ಸ್ಟೀವ್ ಮೆಕ್ಕಾನ್ನೆಲ್, ತಮ್ಮ ಪುಸ್ತಕ ಕೋಡ್ ಕಂಪ್ಲೀಟ್ನಲ್ಲಿ, ಈ ಶೈಲಿಯನ್ನು ಬಳಸದಂತೆ ಸಲಹೆ ನೀಡುತ್ತಾರೆ; ಅವರು ಕೋಡ್ ಮಾದರಿಯನ್ನು "ಕೋಡಿಂಗ್ ಹಾರರ್" ಐಕಾನ್ನೊಂದಿಗೆ ಬಳಸುತ್ತಾರೆ, ಇದು ವಿಶೇಷವಾಗಿ ಅಪಾಯಕಾರಿ ಕೋಡ್ ಅನ್ನು ಸಂಕೇತಿಸುತ್ತದೆ, ಮತ್ತು ಇದು ಕಟ್ಟುಪಟ್ಟಿಗಳಿಗೆ ಹೆಚ್ಚುವರಿ ಮಟ್ಟದ ಇಂಡೆಂಟೇಶನ್ ಅಗತ್ಯವಿರುವ ಮೂಲಕ ಓದುವಿಕೆಯನ್ನು ತಡೆಯುತ್ತದೆ ಎಂದು ಹೇಳುತ್ತದೆ. ಗ್ನಿಟ್ಸ್ ಸ್ಟ್ಯಾಂಡರ್ಡ್ಸ್ ಉಲ್ಲೇಖಗಳು ಬಾಹ್ಯ ಕೊಂಡಿಗಳು ಗ್ನು ಕೋಡಿಂಗ್ ಸ್ಟ್ಯಾಂಡರ್ಡ್ಸ್ ಎಕ್ಲಿಪ್ಸ್ ಕೋಡ್ ಸ್ಟೈಲ್ ಫಾರ್ಮ್ಯಾಟರ್ ಫಾರ್ ಗ್ನು ಕೋಡಿಂಗ್ ಸ್ಟ್ಯಾಂಡರ್ಡ್ಸ್ ಫ್ರೀ ಸಾಫ್ಟ್ವೇರ್ ಕಲ್ಚರ್ ಮತ್ತು ಡಾಕ್ಯುಮೆಂಟ್ಸ್ ಕೋಡಿಂಗ್ ಸ್ಟ್ಯಾಂಡರ್ಡ್ಸ್ ಮೂಲ ಕೋಡ್ ಲೇಖನಗಳು ಉದಾಹರಣೆಗೆ ಸಿ ಕೋಡ್