рдПрдПрдирдПрд╕рдЖрдИ рд╕реА рдореЗрдВ рдкрджрд╛рд╡рдирдд рд╕рдорд╛рд░реЛрд╣ рдШреЛрд╖рдгрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░


рдПрдПрдирдПрд╕рдЖрдИ рд╕реА рдорд╛рдирдХ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдШреЛрд╖рдгрд╛ рдХрд╛ рд╕рдмрд╕реЗрдЯ рд╣реИ рдЬреЛ рдЗрдирдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЖрдо рдлрд╝рдВрдХреНрд╢рди рдШреЛрд╖рдгрд╛рдУрдВ рдХреЗ рдиреБрдХрд╕рд╛рди рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдкреЗрд╢ рдХрд┐рдП рдЧрдП рдереЗред


рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдлрд╝рдВрдХреНрд╢рди рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рдХреЛрд╖реНрдардХреЛрдВ рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд╣реИ, рдЕрдиреНрдпрдерд╛ рдЗрд╕ рддрд░рд╣ рдХреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдЕрдкреНрд░рдЪрд▓рд┐рдд рдлрд╝рдВрдХреНрд╢рди рдШреЛрд╖рдгрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╣рдЪрд╛рдирд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдЕрд╕реНрдкрд╖реНрдЯ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддрд╛ рд╣реИред


рдЖрдЙрдЯрдбреЗрдЯреЗрдб рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк


рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдШреЛрд╖рдгрд╛рдкрддреНрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рдФрд░ рдЗрд╕рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рджрд╛рдпрд░реЗ рдореЗрдВ рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИ ред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╕рднреА рдлрд╝рдВрдХреНрд╢рди рдШреЛрд╖рдгрд╛рдУрдВ рдХреЛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдирд╣реАрдВ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рдкрд╛рд╕ рдЬреЛ рдЗрдирдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИред


рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреА рдкрд╣рд▓реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдПрдХ рдШреЛрд╖рдгрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд╝рдВрдХреНрд╢рди рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдирд╣реАрдВ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд╕рд╣реА рд░реВрдк рд╕реЗ рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдкрдиреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ:


/* #1 (   "foo") */ void foo(); /* #2 (  "bar") */ void bar(int count, const char *word); 

рдкрджрд╛рд╡рдирдд рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ


рдЖрдЗрдП рд╕реАрдзреЗ 1972 (рдЬрд┐рд╕ рд╡рд░реНрд╖ рд╕реА рднрд╛рд╖рд╛ рдХреЛ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛) рдХреЛ рдпрд╛рдж рдХрд░реЗрдВ рдФрд░ рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдЙрд╕ рд╕рдордп рдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░реЛрдВ рдиреЗ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдерд╛ред рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛ рджреВрдВ рдХрд┐ рдПрдХ рдлрдВрдХреНрд╢рди рдбреЗрдлрд┐рдиреЗрд╢рди рдЗрд╕рдХреЗ рд╕рд┐рдЧреНрдиреЗрдЪрд░ рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рдПрдХреНрдЬреАрдХреНрдпреВрдЯреЗрдмрд▓ рдмреНрд▓реЙрдХ (рдмреЙрдбреА) рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдХреЛрдб K & R рд╢реИрд▓реА рдореЗрдВ add рдлрд╝рдВрдХреНрд╢рди рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ:


 void add(right, left, result) int right; int left; int *result; { *result = right + left; } 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рджреЗрдЦрд╛ рд╣реЛрдЧрд╛, рдЗрд╕ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдореЗрдВ, рдХреЛрд╖реНрдардХ рдлрд╝рдВрдХреНрд╢рди рдХреА рдкрд╣рдЪрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЗрдирдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдкрд┐рдЫрд▓реЗ рдЦрдВрдб рдореЗрдВ рд╡рд░реНрдгрд┐рдд "рдХреНрд▓рд╛рд╕рд┐рдХ" рдлрд╝рдВрдХреНрд╢рди рдШреЛрд╖рдгрд╛рдУрдВ рдореЗрдВ рд╕рдорд╛рди рд╕рдВрдкрддреНрддрд┐ рд╣реИред


рдЕрд╕реНрдкрд╖реНрдЯ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпрд╛рдБ


рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдЕрдЧрд░ ANSI C рдорд╛рдирдХ рджреНрд╡рд╛рд░рд╛ рдкреЗрд╢ рдХрд┐рдП рдЧрдП рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдирдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЕрд╡рд▓реЛрдХрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХрдард┐рди рдЕрд╕реНрдкрд╖реНрдЯ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рдЙрддреНрдкрдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:


 #include <stdio.h> #include <stdint.h> #include <inttypes.h> #include <limits.h> /*    "print_number" */ void print_number(); int main(void) { /*  */ print_number((double)13.359); print_number((double)9238.46436); print_number((double)18437); /*    */ print_number(UINT64_MAX); print_number("First", "Second", "Third"); print_number(NULL, "Breakfast", &print_number); } void print_number(double number) { printf(" : [%f]\n", number); } 

рд╣рдо рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗред рд╕рд╣реА print_number рдлрд╝рдВрдХреНрд╢рди print_number рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рд╕реВрдЪреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдШреЛрд╖рд┐рдд print_number , рдЗрд╕рд▓рд┐рдП рдЖрдк рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд┐рд╕реА рднреА рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХрд╛рд░реНрдпрдХреНрд░рдо рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рд╕рдВрдХрд▓рд┐рдд рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рдгрд╛рдо рдореБрджреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛:


 $ gcc illegal.c -o illegal -Wall $ ./illegal  : [13.359000]  : [9238.464360]  : [18437.000000]  : [0.000000]  : [0.000000]  : [0.000000] 

рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ -Wall рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде рднреА, -Wall рд╕рдВрдХрд▓рдХ gcc (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0 рдиреЗ рдХреЛрдИ рдЪреЗрддрд╛рд╡рдиреА рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХреА (рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рд╡рд╛рдВрдЫрдиреАрдп рд╣реЛрдЧрд╛)ред


рдЗрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдмрд╕ рд╕рд╛рддрд╡реЗрдВ рд▓рд╛рдЗрди рдкрд░ print_number рдлрд╝рдВрдХреНрд╢рди рдХреА рдШреЛрд╖рдгрд╛ рдХреЗ рдХреЛрд╖реНрдардХреЛрдВ рдореЗрдВ double number рдЬреЛрдбрд╝реЗрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдорд╛рдирдХ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдИ рднреА рдХрдВрдкрд╛рдЗрд▓рд░ main() рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрдЧрд╛:


 $ gcc -Wall illegal.c -o illegal illegal.c: In function 'main': illegal.c:17:22: error: incompatible type for argument 1 of 'print_number' print_number("First", "Second", "Third"); ^~~~~~~ illegal.c:7:6: note: expected 'double' but argument is of type 'char *' void print_number(double number); ^~~~~~~~~~~~ illegal.c:17:9: error: too many arguments to function 'print_number' print_number("First", "Second", "Third"); ^~~~~~~~~~~~ illegal.c:7:6: note: declared here void print_number(double number); ^~~~~~~~~~~~ illegal.c:18:22: error: incompatible type for argument 1 of 'print_number' print_number(NULL, "Breakfast", &print_number); ^~~~ illegal.c:7:6: note: expected 'double' but argument is of type 'void *' void print_number(double number); ^~~~~~~~~~~~ illegal.c:18:9: error: too many arguments to function 'print_number' print_number(NULL, "Breakfast", &print_number); ^~~~~~~~~~~~ illegal.c:7:6: note: declared here void print_number(double number); ^~~~~~~~~~~~ 

рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдХрд╛рд░реНрдп


рдореИрдВ рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдФрд░ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреА рдХреЛрд╖реНрдардХ рдореЗрдВ void рдХреАрд╡рд░реНрдб рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдЬреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ рд▓реЗрддреЗ рд╣реИрдВ, рд╡реЗ рдЕрддреНрдпрдзрд┐рдХ рд╡рд╛рдВрдЫрдиреАрдп рд╣реИрдВ (рд▓реЗрдХрд┐рди рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ)ред рдпрджрд┐ рдпрд╣ рдирд┐рдпрдо рдирд╣реАрдВ рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рдВрдХрд▓рдХ рдкрд╛рд╕ рдХрд┐рдП рдЧрдП рддрд░реНрдХреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрддреНрд░рд╛рдЪрд╛рд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдЬрдм рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд╛ рд╕реЗ рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред


 #include <stdio.h> /*    "do_something" */ void do_something(); int main(void) { /*  "do_something"       */ do_something(NULL, "Papa Johns", 2842, 1484.3355); } void do_something() { puts("I am doing something interesting right now!"); } 

do_something() рдлрд╝рдВрдХреНрд╢рди рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдФрд░ рдШреЛрд╖рдгрд╛ рдореЗрдВ void рдХреАрд╡рд░реНрдб рдбрд╛рд▓рдХрд░ рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХреЛ рдареАрдХ рдХрд░реЗрдВ, рдЕрдиреНрдпрдерд╛ рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд░рдо рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рд╕рдВрдХрд▓рди рдХрд░реЗрдЧрд╛ред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, main() рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ void рдЯреЛрдХрди рдХреЗ рд╕рд╛рде рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред


рдирд┐рд╖реНрдХрд░реНрд╖


рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рд▓реЗрдЦрди рд╕реНрдЯреАрдлрди рдкреНрд░реЗрдЯ рдХреА рдкреБрд╕реНрддрдХ "рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд▓реИрдВрдЧреНрд╡реЗрдЬред рд▓реЗрдХреНрдЪрд░реНрд╕ рдПрдВрдб рдПрдХреНрд╕рд░рд╕рд╛рдЗрдЬред рдЫрдард╛ рд╕рдВрд╕реНрдХрд░рдг" рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкрд╛рдВрдЪрд╡реЗрдВ рдЕрдзреНрдпрд╛рдп рдХреЗ рдЦрдВрдб "рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдп" рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рдерд╛ред

Source: https://habr.com/ru/post/hi456682/


All Articles