group-telegram.com/misha_writes_code/206
Create:
Last Update:
Last Update:
Зацените, какие штуки оказывается можно делать в си:
#include <stdio.h>
int sum(a, b) int a; long b;
{
return a + b;
}
int main() {
printf("%d\n", sum(1, 3));
return 0;
}
https://godbolt.org/z/TfWhjdb74
Вообще на сишный код не похоже)
Эта штука называется
K&R C
, но что-то полезное лучше искать по K&R definition style. Такой стиль поддерживается компиляторами си, но не c++.В частности из-за этого стиля
void foo();
это не "функция принимающая 0 аргументов", а "функция без прототипа". Из-за чего такой код компилируется, хотя и может приводить к УБ:
#include <stdio.h>
int sum() {
return 5;
}
int main() {
printf("%d\n", sum(1, 3));
return 0;
}
Однако, в 23 стандарте запретили объявлять функции без прототипов, поэтому там код уже компилироваться не будет:
https://godbolt.org/z/qd4KW4PMc
До 23 стандарта получить ошибку компиляции в таком коде можно, если добавить прототип (тут это уже функция принимающая 0 аргументов):
#include <stdio.h>
int sum(void) {
return 5;
}
int main() {
printf("%d\n", sum(1, 3));
return 0;
}
P.S.
Сам наткнулся на этот факт тут - https://habr.com/en/articles/786096/ (но надо читать еще и комменты, так как в статье есть ошибки)
Более подробно про прототипы можно глянуть вот тут:
https://stefansf.de/post/declaring-defining-and-prototyping-functions/
BY Миша пишет код

Share with your friend now:
group-telegram.com/misha_writes_code/206