LINUX.ORG.RU

синтаксис си

 ,


1

1

есть довольно простой вопрос по синтаксису.

мне надо напечатать на stdout число.

    char qwer = 5;
    char asdf = qwer+'0'
    write(1, &asdf, sizeof(asdf));

можно ли записать как-то так:

    char qwer = 5;
    write(1, (&qwer) + '0', sizeof(qwer));

?

★★★

Последнее исправление: CYB3R (всего исправлений: 1)

Нет, &qwer - значит адрес переменной qwer. А ты к адресу пытаешься прибавить '0', понятное дело получается лажа

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

не, в том-то и дело, что мне write нужен, printf как-то хитро буферизирует данные и не по порядку их выкидвает потом.

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

C точки зрения синтаксиса — можно.

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

printf как-то хитро буферизирует данные и не по порядку их выкидвает потом.

fflush(stdout);, не?

theNamelessOne ★★★★★
()

все понял, ступил.

я ж передаю не переменную, а ее адрес.

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

угу, работает.

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

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

я думаю, переменная дополнительная все равно создается компилятором

Всё равно результат хранить надо для write

так что смысла нет в таком синтаксисе

Есть. В этом случае (по сравнению с моим вариантом) переменная будет в регистре/куче/стеке (смотря как компилятор оптимизирует).

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

да. в регистре, и переменной фактически нет дополнительной, поскольку регистр в обоих случаях используется

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

У меня static tmp. А это значит, что место под неё будет выделено. Оптимизатор конечно разместит её для конкретного случая в регистр. Но это не то.

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

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

у меня в перемешку было printf и write, почему-то printf не в свою очередь печатал, хотя может показалось

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

Потому что printf буферизует вывод, а write напрямую пишет. Перед write'ом флушить нужно, если перемешиваешь. Либо юзать fwrite, он тот же буфер использует.

arturpub ★★
()
Ответ на: комментарий от val-amart

сам ответил

я ни на что не отвечал, я даже вопроса не задавал.

IvanR ★★★
() автор топика
Последнее исправление: IvanR (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.