Думаю, это вопрос личного мнения. Также учтите, что в Интернете есть сотни сообщений, информирующих о различиях между дистрибутивами. http: // lifehacker. com / 5889950 / how-to-find-the-perfect-linux-distribution-for-you
В любом случае, я согласен со ссылкой, я тоже новичок и использую Linux Mint.
Это происходит потому, что вы пытаетесь выполнить целое число как функцию. int socket = 5;
имеет то же имя, что и функция socket()
Этого можно добиться более простым способом:
$ cat main.c
int main = 9;
$ clang -Wall main.c
$./a.out
Segmentation fault
Обновление :, как упомянул в комментарии @Kusalananda, происходит не только на clang.
Линкер преобразует символ socket
в вашу целочисленную переменную. Затем код «вызывает» его, что приводит к сбою. Это не ошибка.
Работает с компилятором Microsoft из-за специальной схемы искажения, используемой для декорирования всех экспортируемых символов. В этой схеме функции C и глобальные переменные оформлены по-разному(?socket@@YAHHHH@Z
и ?socket@@3HA
), что приводит к разным именам символов. В *nix-системах никакое изменение не используется для простых функций C и глобальных переменных.