LINUX.ORG.RU

Узнать ОС в C

 


0

1

у меня такая задача есть переменная bool oc и надо написать функицю котороя возвращала бы oc=true если windows и oc=false если linux. Кто знает как плиз помогите;

Ответ на: комментарий от Softwayer

Пользователи GoboLinux в любом случае должны страдать, но nixos-богам приходится потом патчить софт

Я думаю, что nixos и ее богов можно игнорировать с той же легкостью, что и Gobo.

tailgunner ★★★★★
()
Ответ на: комментарий от reprimand

То, что ты сделал, называется «паттерн boolshit»

inb4 «кококо читабельнее для таких же олигофренов как я»

anonymous
()
Ответ на: комментарий от reprimand

О преимуществах я уже рассказал. Реальных примеров, при которых преимущество превращается в тлен я не увидел.

Реальных примеров, где ты бы показал преимущество, никто так и не увидел.

Waterlaz ★★★★★
()
Ответ на: комментарий от Waterlaz

Реальных примеров, где ты бы показал преимущество, никто так и не увидел.

я тут уже было собрался тебе накидать примеров, но после

Да ты наркоман!!!

понял что серьезного разговора не получится

reprimand ★★★★★
()
Ответ на: комментарий от Waterlaz

Кстати, апдейтик насчет накроманов, если ты любитель читать сотни строк из &&||&&&|&&|&|&|||&|&&|&&|||&&, то рекомендую тебе попробовать perl (сам я на нем не пишу если чё).

Там таких уродов любят.

reprimand ★★★★★
()
Ответ на: комментарий от reprimand

я давно это предлагаю.

и нагрузка сразу упадет процентов на 80%

mos ★★☆☆☆
()
Ответ на: комментарий от anonymous

У тебя программа на Си будет решать какой бинарь запускать?

anonymous
()
Ответ на: комментарий от Harald

Не кошерно. false вернется на линуксах, бсдях, солярах, чпуксах и т.д. Может быть даже на мобильных вендах.

Nedis
()
#include <stdio.h>
int main(void){
    int os=-3;
    enum OS { LINUX, WINDOWS, DARWIN, FREEBSD };
    enum BOOLEAN { false, true };
    #ifdef __MINGW32__
        fprintf(stderr,"mingw-");
    #elif _MSC_VER
        fprintf(stderr,"msvc%d-",_MSC_VER);
    #endif
    #if defined(_WIN32) && defined(_WIN64)
        fprintf(stderr,"win64");
        os=1;
    #elif defined(_WIN32) && ! defined(_WIN64)
        fprintf(stderr,"win32");
        os=1;
    #elif __unix__
    #ifdef __CYGWIN__
        fprintf(stderr,"cygwin");
        os=1;
    #elif __APPLE__
        fprintf(stderr,"osx");
        os=2;
    #elif __linux__
        fprintf(stderr,"linux"); 
        os=0;
    #elif __FreeBSD__
        fprintf(stderr,"freebsd");
        os=3;
    #endif
    switch ((size_t)sizeof(void*)) {
        case 8:fprintf(stderr,"64"); break;
        case 4:fprintf(stderr,"32"); break;
    }
    #else
        fprintf(stderr,"unknown platform");
        os=-1;
    #endif
    if (os==WINDOWS) return true;
    else return false;
    return -3;
}
anonymous
()
Ответ на: комментарий от Sahas

Да, -3 лишнее. Просто подогнал под условия задачи.

anonymous
()
Ответ на: комментарий от reprimand

с чего ты взял что ему нужно не в рантайме?

Видимо с того, что запустить elf в виндовс можно только начиная с десятки, да и это осилит не каждый пользователь.

andreyu ★★★★★
()
Ответ на: комментарий от MyTrooName

Тут выше специалисты пояснили, что такой код недостаточно красивый и читаемый, что поправимо добавлением оператора if.

Softwayer ★★
()
Ответ на: комментарий от MyTrooName

пытаться серьезно говорить с наркоманами - мазохизм

Знаешь, наркоманов тут трудно сразу определить. Ну и к тому же, это ЛОР. Тут все немного двинутые, даже ты, даже я, даже небо.

reprimand ★★★★★
()
Ответ на: комментарий от MyTrooName

я семантику access наизусть не знаю, и этого не стыжусь

а потратить пару секунд чтобы в свободном терминале открыть man и пролистать к секции RETURN VALUE религия не позволяет?

reprimand ★★★★★
()
Ответ на: комментарий от reprimand

а потратить пару секунд чтобы в свободном терминале открыть man и пролистать к секции RETURN VALUE религия не позволяет?

религия

нет, лень в сочетании с отсутствием крайней нужды

MyTrooName ★★★★★
()

Неправильно, либо переменная должна называться not_os, либо значения должны быть true для linux, false для windows!

anonymous
()
Ответ на: комментарий от MyTrooName

нет, лень в сочетании с отсутствием крайней нужды

Попробуй тогда вбросить как-нибудь потолще в след. раз, а то совсем не весело. Я когда увидел твой никнейм в уведомлениях и перечитал заметку к пользователю ожидал увидеть какой-нибудь трешак в стиле зенитара 2016 года.

reprimand ★★★★★
()
Ответ на: комментарий от reprimand

Какие интересные пути познания. В любом случае, сомневаюсь, что когда-нибудь пойму человека, для которого из того, что функция возвращает bool, следует нужность явного использования макросов, что сводит на нет весь смысл введения логического типа, и это всё «во имя следования стандарту», что бы это ни значило.

Softwayer ★★
()
Ответ на: комментарий от reprimand

понял что серьезного разговора не получится

Ну что же вы все такие ранимые? //_-

Waterlaz ★★★★★
()
Ответ на: комментарий от Softwayer

Какие интересные пути познания

Кто-то ради жратвы прокалывает себе тело и показывает на публику... люди, сэр.

В любом случае...

Как бы так объяснить... мой основной аргумент был не столько во имя следования стандарта и явного использования макросов (хотя это таки важно), а в повышении читабельности кода. Это когда ты открыл и прочитал, а не тратишь лишнее время на раздумия.

К слову, провел опрос среди знакомых и обнаружил у них УЖЕ сложившуюся проф. деформацию. Собственно, как и ожидалось. Люди не хотят ничего менять.

reprimand ★★★★★
()
Ответ на: комментарий от reprimand

Ну я считаю, что return expr; читабельнее, чем if, делающий то же самое, но в три строки. Не знаю, профдеформация ли это (казалось бы, неплохо бы универ сначала закончить, а потом уже профдеформироваться начинать, а такого мнения я был ещё в школе) или просто вкусовщина.

Softwayer ★★
()
Ответ на: комментарий от batekman

GNU coreutils вестимо никакого, а эта хрень — неудачная реализация инита которую тоже можно заменить, как и любое юзерспейсое приложение. Это ж не шиндовс.

anonymous
()
Ответ на: комментарий от reprimand

Попробуй тогда вбросить как-нибудь потолще в след. раз, а то совсем не весело

клоун здесь ты

Я когда увидел твой никнейм в уведомлениях и перечитал заметку к пользователю ожидал увидеть какой-нибудь трешак в стиле зенитара 2016 года.

прости, что разочаровал. зато ты всегда можешь сам себя почитать

MyTrooName ★★★★★
()
Ответ на: комментарий от anonymous

Вот это очень хорошо, в только в данном случае несколько неприменимо. А у того чувака какие-то проблемы похоже. Ведь чём больше текста, тем сложнее его воспринимать, тем большее время уходит на разбор.

anonymous
()
Ответ на: комментарий от Softwayer

Ну я считаю, что return expr; читабельнее, чем if, делающий то же самое, но в три строки.

Зависит от контекста. Иногда на однострочники тратишь больше времени чем на 5 строк.

Не знаю, профдеформация ли это (казалось бы, неплохо бы универ сначала закончить, а потом уже профдеформироваться начинать, а такого мнения я был ещё в школе) или просто вкусовщина.

Не распарсил, объясни что ты хотел сказать. Ты еще универ не закончил?

reprimand ★★★★★
()
Ответ на: комментарий от theNamelessOne

Зря, там твои and и or из коробки.

Чукча не читатель? Создается впечатление, что ты видишь знакомые слова и отвечаешь на них.

reprimand ★★★★★
()

спросить у uname. если uname нет, то это не ос а оболочка дешёвая

buratino ★★★★★
()
Ответ на: комментарий от vromanov

systemd

Какое отношение к линуксу она имеет?

Вот именно!

Lavos ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.