• Стоит ли сегодня новичку изучать C/C++?

    gbg
    @gbg
    Любые ответы на любые вопросы
    И так, случайные чуваки из интернета, перед вами человек, о знаниях, умениях, навыках и способностях вы ничего не знаете.

    И он спрашивает вас - а стоит ли мне заниматься X?

    НУ ОТКУДА МЫ ЗНАЕМ, стоит ли вам заниматься X? Вот я программирую уже больше 20 лет, 16 из них я программирую на C++, 14 - получаю за это зарплату в виде пяти, а потом и шестизначной суммы

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

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

    Если у вас есть желание работать типа в айти 5/2 с 9 до 18, получать стабильные 90к рэ в месяц - есть более "легкие" пути.

    Чем грозит неправильный выбор при высокой зарплате? Размазыванием слез и других жидкостей по хабру в духе "ребята, мне 25 годиков, на мне жена, дите, ипотека, я получаю три штуки баксов в месяц, но я совсем выгорел, у меня депрессия, тревога, импотенция, жена говорит, что я эмоционально холоден к ней, изменяет и грозит разводом...

    КАКОГО ПСИХОТЕРАПЕВТА МНЕ ВЫБРАТЬ, ШТОБ ПОМОХ?"
    Ответ написан
    4 комментария
  • Как поместить русский символ в переменную wchar_t в Xcode?

    Никак, этот пример кода рассчитан на Windows. В Windows используется кодировка UTF-16, для которой в C под Windows используется wchar, и кириллический символ можно указать как отдельный wchar. Но такое пройдет не со всеми символами Unicode, т.к. некоторые требуют более 1 wchar и делать так не надо. В общем случае для UTF-кодировок не возможно запихнуть 1 символ в одну переменную, даже для хранения одного символа нужна строка, поэтому это пример плохого, не универсального кода. L для указания не-ASCII констант это специфика IDE и компиляторов для Windows (в основном Visual Studio).

    MacOS сейчас использует в основном кодировку UTF-8 и кириллический символ не влазит в 1 октет UTF-16. В C нет способа представить отдельный символ UTF-8 в общем случае, т.к. он так же может иметь переменную длину, кириллический символ можно представить в виде 2х символов char, их можно хранить как строку. Засунуть их в 1 16-битную переменную можно, но не нужно, т.к. в UTF-8 символы могут занимать 1,2,3,4 октета (и потенциально больше) и использование не-8битных типов для UTF-8 нецелесообразно. Вам следует переписать код с учетом специфики UTF кодировок и использовать строку даже для хранения отдельного символа. Такой код потенциально можно сделать кросс-платформенным.
    Ответ написан
    Комментировать
  • Как называется книга для с и с++?

    @res2001
    Developer, ex-admin
    Еще есть хорошая книга Дейтелов "Как программировать на Си". Там то же самое начало Си, дальше С++. Книжка годная.
    Ответ написан
    Комментировать
  • Как проверить пустой ли массив?

    @TheCalligrapher
    В языке С в принципе не бывает "пустых" массивов. Разве что динамически выделенная под массив память может иметь размер 0 или flexible array member в структуре может соответствовать массиву размера 0.

    Поэтому не ясно, о чем вы вообще ведете речь.

    В любом случае, передавать в такую функцию правильный размер массива - ваша задача.
    Ответ написан
    Комментировать
  • Как показать адрес в памяти?

    Griboks
    @Griboks
    С помощью отладчика (и профайлера) можно увидеть ещё много чего интересного.
    Ответ написан
    Комментировать
  • Как сравнить 3 числа через if?

    Zoominger
    @Zoominger
    System Integrator
    q > e > w
    Сишка так не умеет, разделяйте условие.
    Ответ написан
    3 комментария
  • Как сравнить 3 числа через if?

    wisgest
    @wisgest
    Не ИТ-специалист
    a<b<c
    работает, но не так как в математике, а вот так:
    (a<b)<c
    — значение истинности выражения a<b (0 или 1) сравнивается с c.
    Для записи цепочки (не)равенств надо использовать составное условие «и» (&&):
    (a<b)&&(b<c)
    Ответ написан
    Комментировать
  • Откуда появляется ошибка?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    mid = high + low;
    guess = arr[mid];

    Первая очевидная ошибка здесь: сумму надо бы разделить пополам.

    else if (guess < item)
      low = mid - 1;

    Вторая очевидная ошибка здесь: mid может быть равен 0, а значит low может вылезти за пределы массива снизу.

    С условием выхода из цикла поиска при отсутствии искомого значения в массиве тоже не всё ОК.

    int arr[length];
    Если length = 2147483647, то программа вообще отказывается работать.

    Ты пытаешься разместить массив размером 8ГБ на стеке. Как видишь, это не очень хорошая идея.
    Ответ написан
    1 комментарий
  • Откуда появляется ошибка?

    @User700
    int arr[length];
    
    int		main(int argc, char **argv)
    {
        ...
    }

    Объявите массив как глобальную переменную чтобы эта память была не на стеке. Или используйте malloc (+ free) для динамического выделения её в куче.
    Ответ написан
    Комментировать
  • Как сгенерировать изображение в СИ?

    @LASHKOAG
    Си, Робототехника, Linux, Телеметрия, Разработчик
    полезное

    Как увидеть картинку двоичным кодом?

    у картинки есть свои "стартовые" и "стоповые" байты

    0xFFD8 - Начало изображения
    0xFFC0 - Начало фрейма
    и тд и тд
    0xFFD9 - Конец закодированной части изображения

    https://ru.wikipedia.org/wiki/JPEG

    соответственно создаем файл формата jpg и пишем туда массив по всем правилам, описанным в источнике, содержание будет 00 или FF (не помню)
    я бы как то так бы сделал
    Ответ написан
    Комментировать
  • Почему не переворачивает строку?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Что не так?
    char *str = "hello";

    Вот эта строчка не так. То, что компилятор разрешает так делать -- это анахронизм и отсутствие мало-мальской диагностики. "hello" может находиться (и в твоём случае, похоже, и находится) в области памяти доступной только для чтения, изменять эту строку нельзя. Правильно было бы написать так:
    char str[] = "hello";
    Если сделать эту замену, то код будет выделять место для массива str на стеке, менять такой массив можно.
    Ответ написан
    5 комментариев
  • Как в gcc сохранять объектные файлы(в другой папке)?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как в gcc сохранять объектные файлы

    Опция -o -- путь к результату, препроцессирования/компиляции/линковки. Научи свой Makefile подставлять правильный путь в эту опцию.
    Ты скажешь "а у меня 100500 исходных файлов компилируется разом". Ответ -- а не надо так делать. Компилятор всё равно вызывается каждый раз новый. Напиши правило компилирующее один файл в нужный каталог -- и выполни его по разу для каждого исходника. Например так:
    NAME = calc
    
    SRC = main.c \
      parser.c \
      ft_lib/ft_atoi.c \
      ft_lib/ft_putchar.c \
      ft_lib/ft_putnbr.c
    
    BUILDDIR=build
    OBJ = $(addprefix $(BUILDDIR)/,$(subst /,_,$(patsubst %.c,%.o,$(SRC))))
    
    FLAGS = #-Wall -Wextra -Werror
    
    all: $(NAME)
    
    $(NAME): $(OBJ)
      gcc $(OBJ) -o $(NAME)
    
    define CC_RULE =
    $(BUILDDIR)/$(subst /,_,$(patsubst %c,%o,$(SOURCE))): $(SOURCE)
      gcc $(FLAGS) -c $< -o $@
    endef
    
    $(foreach SOURCE,$(SRC),$(eval $(call CC_RULE,$(SOURCE))))
    
    clean:
      rm -f $(OBJ)
    
    fclean:
      rm -f $(NAME)
    
    re: fclean all


    Смотри: я сделал список объектников из $(SRC), написал генератор CC_RULE, который для любого исходника генерирует правило компиляции его в объектник под $(BUILDDIR) и вызвал его для всех исходников в $(SRC).

    Это забавное развлечение, но гораздо практичнее воспользоваться существующей системой сборки: autotools/CMake/...
    Ответ написан
    4 комментария
  • Как сгенерировать изображение в СИ?

    Griboks
    @Griboks
    1. создайте bitmap картинку как массив 100х100х3
    2. конвертируйте её в jpg любой популярной утилитой
    Ответ написан
    Комментировать
  • Как сгенерировать изображение в СИ?

    NeiroNx
    @NeiroNx
    Программист
    Для начала про сам формат https://ru.bmstu.wiki/%D0%9A%D0%BE%D0%B4%D0%B8%D1%...
    Потом https://habr.com/ru/post/102521/

    кратко: начало,описание,таблица квантов(кусочков),данные,конец

    Но я бы рекомендовал готовую библиотеку взять если надо срочно.

    P.S. Двоеточия - это для задания функций в классах, ООП и все такое из C++, по этому тоже есть куча литературы.
    Ответ написан
    Комментировать
  • Что означает void *?

    mayton2019
    @mayton2019
    Bigdata Engineer
    void * означает указатель на область памяти неизвестного типа. При разыменовании тебе надо будет
    заранее знать что за зверь скрывается под этой памяти чтобы правильно интерпретировать результат.

    В современном программировании безтиповые указатели - считается угрозой безопасности и большинство компилляторов выдают WARNING. При прочих равных условиях лучше void * не использовать а использовать ... ну например указатель на массив байт или на такую-же структуру s_list к примеру.
    Ответ написан
    Комментировать
  • Как называется книга для с и с++?

    Ответ написан
    Комментировать
  • Как реализовать перемещение в терминале?

    @DollaR84
    Не вспомню всех деталей реализации класса по работе с консолью, но могу точно указать направления для поисков следующее:
    • Функция для получения handle консоли: GetStdHandle;
    • создавался буфер char'ов размером с игровое поле заданного размера (100x80). Затем функцией SetConsoleScreenBufferSize устанавливался буфер консоли размером с нашим буфером;
    • Для заполнения консоли по ее хендлу из буфера используется функция WriteConsoleOutput

    Обновление буфера консоли необходимо проводить по таймеру, но как он был там реализован уже не припомню. То есть по таймеру необходимо перерисовывать всю консоль.
    Ответ написан
    2 комментария
  • В чём проблема?

    fzfx
    @fzfx
    18,5 дм
    значит что-то не так.
    Ответ написан
    1 комментарий
  • В чём проблема?

    У Вас существует функция main(), где Вы указали ее тип? int main() {}
    Ответ написан
    7 комментариев