Size: a a a

2020 February 07

P

Pavel in rust_offtopic
она ж по умолчанию чистая, сам сказал
источник

AZ

Alex Zhukovsky in rust_offtopic
Pavel
ну, в хаскеле ж можно
но мы вроде и не про хаскель
источник

LC

Lone Coder in rust_offtopic
Alexander Krivitskiy
Вспомнил тут один интересный баг, с которым неделю возился. В файлах А и Б есть одинаковые inline функции GetPort(); они обе возвращают разные порты. Эти файлы оба косвенно инклудятся в файл C, где GetPort() вызывается. В результате вызывался GetPort из А, а рассчитывали на из Б. Уважаемые читатели стандарта, почему это скомпилилось, а не бросило ambiguous ошибку?
а с аргументами там как?
источник

AK

Alexander Krivitskiy in rust_offtopic
Без аргументов
источник

AK

Alexander Krivitskiy in rust_offtopic
int GetPort() { return SOME_CONST; }
источник

r

red75prime in rust_offtopic
Alexander Krivitskiy
Вспомнил тут один интересный баг, с которым неделю возился. В файлах А и Б есть одинаковые inline функции GetPort(); они обе возвращают разные порты. Эти файлы оба косвенно инклудятся в файл C, где GetPort() вызывается. В результате вызывался GetPort из А, а рассчитывали на из Б. Уважаемые читатели стандарта, почему это скомпилилось, а не бросило ambiguous ошибку?
А inline как сделан?
источник

LC

Lone Coder in rust_offtopic
Древние использовали int myfunc(void) при объявлении функции без аргументов, не знаю почему
источник

AK

Alexander Krivitskiy in rust_offtopic
Alexander Krivitskiy
int GetPort() { return SOME_CONST; }
Вот так и сделан.
источник

AK

Alexander Krivitskiy in rust_offtopic
Это в хедере
источник

AK

Alexander Krivitskiy in rust_offtopic
Lone Coder
Древние использовали int myfunc(void) при объявлении функции без аргументов, не знаю почему
Оооооо, я тебе расскажу. Потому что в си foo() - функция, принимающая сколь угодно аргументов
источник

r

red75prime in rust_offtopic
Так дубликаты-же будут в разных compilation unit. Не, что-то я уже не помню как там это всё обрабатывается.
источник

LC

Lone Coder in rust_offtopic
это при использовании static
источник

LC

Lone Coder in rust_offtopic
Alexander Krivitskiy
int GetPort() { return SOME_CONST; }
пытаюсь просто в одном файле такую функцию дважды сделать - не даёт
источник

r

red75prime in rust_offtopic
Есть смутные воспоминания, что то, что будет вызвано, зависит от порядка линковки .o файлов
источник

AK

Alexander Krivitskiy in rust_offtopic
Lone Coder
это при использовании static
Нееее... Я не забуду момент, когда смотрел в хедер на сигнатуру void foo(); А потом смотрел что она используется везде как foo(bar)... А потом я почитал Си стандарт....
источник

LC

Lone Coder in rust_offtopic
Alexander Krivitskiy
Нееее... Я не забуду момент, когда смотрел в хедер на сигнатуру void foo(); А потом смотрел что она используется везде как foo(bar)... А потом я почитал Си стандарт....
при использовании static функция невидима для других юнитов компиляции, про аргументы понятно
источник

AK

Alexander Krivitskiy in rust_offtopic
Lone Coder
пытаюсь просто в одном файле такую функцию дважды сделать - не даёт
В одном точно не даст. Там по файлам как-то так было

А: int GetPort
B: int GetPort
C: include B

D: include A
    include C
    GetPort()

+ Ещё пара промежуточных звеньев в из B в C цепочке
источник

LC

Lone Coder in rust_offtopic
так без разницы, include же до компиляции кода на си вставляется
источник

AK

Alexander Krivitskiy in rust_offtopic
Lone Coder
при использовании static функция невидима для других юнитов компиляции, про аргументы понятно
Ну проверь

void f() {//anything}
...
f(1,2,3,4,5,6)
источник

AK

Alexander Krivitskiy in rust_offtopic
Lone Coder
так без разницы, include же до компиляции кода на си вставляется
Я так тоже думал, поэтому неделю и убил)))

мне кажется она на этапе препроцессинга просто заменилась константой, прямо как дефайн.
источник