LINUX.ORG.RU

Узнать ОС в C

 


0

1

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

сообщение модераторам: я предлагаю банить юзеров которые не могут воспользоваться гуглом

reprimand ★★★★★
()

А почему линукс false?

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

Поидее наоборот надо. Если Win32 функция проверяющая ОС должна возвращать ложь.

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

скорее наоборот

bool  os()
{
#ifndef _WIN32
  return true;
#else
  return false;
#endif
}

mittorn ★★★★★
()

бсд-ешники негодуют
на лицо сокорбление чувств и меньшинств (еще 100500 осей)

+ к бану

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

не проще 2 бинаря собрать будет, не?

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

Какая разница, если в рантайме всегда 1 ОС.

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

Не учи плохому, это только в POSIX взлетит.

#include <stdio.h>
FILE *f = fopen("/usr/lib/systemd", "r");
if (f == NULL) {
        return true;
} else {
        fclose(f);
        return false;
}

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

А что если systemd расположен в каком-нибудь нестандартном префиксе, как, скажем, в nixos?

ищем в $PATH, как же еще!

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

Ну уж если упрощать, то почему бы не return access(«/usr/lib/systemd», F_OK) == 0;?

не думаю что это хорошая идея
http://pubs.opengroup.org/onlinepubs/009695399/basedefs/stdbool.h.html

reprimand ★★★★★
()
Последнее исправление: reprimand (всего исправлений: 1)
Ответ на: комментарий от Softwayer

При том, что тип возвращаемого значения функции bool. Следовательно, во имя следованию стандарту логично явно использовать макросы true и false.

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

Согласно этому же стандарту, значения, возвращаемые операторами сравнения, легко и непринуждённо приводятся к bool, поэтому никакого смысла в этом нет.

Softwayer ★★
()

А если под вайном, что надо возвращать?

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

я понимаю что в С 0 это неявно false, а не0 - true, но когда в ПО вводят спец. хидер для этого - им стоит пользоваться

я успел увидеть 0 и !0 ад в реальных проектах, а также грабли, которые из них вытекают.

Не понимаю С разработчиков, которые скептически относятся к stdbool и iso646 только из-за того, что «мы так привыкли».

reprimand ★★★★★
()

Осталось выяснить, что делать тем, у кого нет udev.

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

Сравнение с нулём — это про возвращаемое значение функции, которое int. Мне наплевать, каково низкоуровневое представление булов, но я точно знаю, что (bool)(a == 0) равен true тогда и только тогда, когда a, как ни странно, равно нулю. А выражения вроде if (expr) return true; else return false; уж точно не добавляют коду выразительности.

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

выражения вроде if (expr) return true; else return false; уж точно не добавляют коду выразительности

Я понял. Ты один из «этих».

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

Вот и модератор пришел попетросянить

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

Это тоже не работает в дистрибутивах, использующих нестандартный префикс.

И что? Всё, что можно предложить ТС - это эвристики. Понятно, что для каждой из них можно придумать условия, когда она сфейлит. Например, нестандартный префикс (GoboLinux, ага).

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

Не понимаю С разработчиков, которые скептически относятся к stdbool и iso646 только из-за того, что «мы так привыкли».

Просто преимущества stdbool не очевидны.

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

Страшно взять что-то новое и иногда подумать головой. Люди меньше всего хотят перемен, и это нормально.

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

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

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

Удобно. Читаемо. Красиво.
А в результате тратится меньше времени разработчика.

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

А в результате тратится меньше времени разработчика.

Меньше времени тратится, когда программист более высокоуровневые языки использует, а не когда определеляются бесполезные макросы. Что касается stdbool.h, то это лишь косметическое изменение.

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

Всякие and и xor будут подставляться не только тогда, когда они использованы в качестве операторов.

Deleted
()
Последнее исправление: romeo250501 (всего исправлений: 1)
Ответ на: комментарий от Deleted

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

А с низкоуровневыми, значит, тратится не меньше?

определеляются бесполезные макросы

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

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

Всякие and и xor будут подставляться не только тогда, когда они использованы в качестве операторов.

Можно пример, пожалуйста?

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

Правильно ли я понял, что

bool cmp(int a, int b) {
  if (a < b) return true;
  return false;
}
удобнее, читаемее и красивее, чем
bool cmp(int a, int b) {
  return a < b;
}
?

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

bool and = true; // whoops!

А чё сразу не

int sizeof = 3;
?
Будешь вопить что «ААААА sizeof ЭТО ЖЕ МАКРОС! СРАНЫЕ СВОЙСТВА ПРЕПРОЦЕССОРА НЕ ДАЮТ МНЕ СДЕЛАТЬ ПЕРЕМЕННУЮ С ИМЕНЕМ sizeof!»?

reprimand ★★★★★
()
Последнее исправление: reprimand (всего исправлений: 1)
Ответ на: комментарий от Deleted

Бесполезны они по той причине, что не имеют преимуществ над обычными операторами.

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

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

Например, нестандартный префикс (GoboLinux, ага)

Пользователи GoboLinux в любом случае должны страдать, но nixos-богам приходится потом патчить софт, полагающийся на абсолютные пути. «Условия, когда она сфейлит», зависят от формальной постановки задачи. Если человеку нужно узнать, есть ли у него посиксные системные вызовы (или зачем там ещё ему может понадобиться знать ОС — какие слеши использовать и т.п.), то есть способы сделать это лучше.

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