[フレーム]
1 - 9 件 / 9件
タグ検索の該当結果が少ないため、タイトル検索結果を表示しています。
#include <stdio.h> void fizzbuzz(int n) { int next; int i = 1; do { printf(i % 15 ? i % 5 ? i % 3 ? "%d\n" : "Fizz\n" : "Buzz\n" : "FizzBuzz\n", i); if (i++ >= n) next = 0; } while (next); } int main(void) { printf((char[]){""}); // この位置にprintfが無いとなぜか動かない fizzbuzz(100); } gcc 10.1.0 を使用し、コンパイラが感知したミスには警告を出力してくれる様 -Wall -Wextra を指定し、最適化指示なしでコンパイル、動作させたところ動作するが Wandboxで実行 main() の中の何も出力していない printf(
三行でまとめると シグナルハンドラ内でprintf()してはいけない というより、余計な処理を書いてはいけない もう一度言う、シグナルハンドラで余計なことをするな、非常に大事なことだ はじめに シグナルハンドラでやってよい処理は非常に限られるのに、全くルールを守らないサンプルコードが世の中に大量に出回っている。printf()するなんてもってのほかなのだが、カジュアルにそこらじゅうで見かけて非常に悲しい。 この記事では、そんな状況を少しでも改善したいと思い初心者向きに書いたものだ。そのため、下記では、回避するにはどう実装すればよいのか、ルールを破るとどうなるのか、といった点を先に簡潔に記述する。 なぜしてはいけないのか、POSIXだとかリエントラントだとか、は下の方に追いやっている。玄人は読んでてウズウズするだろうが、細かい話はできるだけ目につかないような構成としたため了解いただきたい。
幅と精度とは Goの標準ライブラリであるfmtパッケージでは、fmt.Printf関数やfmt.Sprintf関数など、書式を指定して表示や文字列を生成する関数が提供されています。Go1.19では、バイト列([]byte型)を生成するfmt.Appendf関数も追加されました。 書式の中では、%dや%sのようにverbを指定して、表示方法(文字列の組み立て方)を指定します。%2dや%2.3fのように、幅や精度を指定ができることはCのprintf関数と似た機能なのでよく知ってる方も多いでしょう[1]。 幅と精度を引数で指定する 幅と精度は、実は引数で指定できます。頑張ってfmt.Sprintf("%%%dd", width)のように書式文字列を生成する必要はありません。幅や精度に*と記述すると引数で値を指定できます。 たとえば、幅の場合は次のように書けます。
概要 printfに代表される可変長引数関数の仕組みを調べ、muslの実装を読み、それを自作OSにフルスクラッチで実装するという試みです。タイトルにはprintfとありますが、現状自作OSにメモリ管理機能なんてない(mallocなんてない)のでまずvsnprintfを実装し、それを用いてprintf(もどき)を作ることにします。環境はx64を前提とします。 標準ライブラリで実装してみる 最終的にはフルスクラッチで実装しますが、完成形を見ておこうということで標準ライブラリを用いて実装してみます。 #include <stdio.h> #include <stdarg.h> #define BUF_SIZ 100 void myprintf(char *fmt, ...) { char buf[BUF_SIZ]; va_list ap; int ret; va_start(ap, fmt);
Signs of Triviality Opinions, mostly my own, on the importance of being and other things. [homepage] [blog] [jschauma@netmeister.org] [@jschauma] [RSS] Easy, right? It's gotta be 0, because since at least ISO/IEC 9899:1999 (aka "C99"), main shall implicitly return 0 if you, the forgetful programmer, didn't bother to explicitly return a value: 5.1.2.2.3 Program termination If the return type of the
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?
こんにちは。kazuです。 今回は授業でprintfを使ったので、魔改造しました。 後でレポートを書くときに忘れないように記事にしてみました。 ことの発端 授業「複雑なプログラム書いてね!出力は要件を満たしてね!」 ぼく「デバッグ用の出力...」 ぼく「printfの関数名だけ変えてデバッグ出力管理したろ!」 マクロ「君のマクロはあぶないよ!」 ...ということでマクロを使わずprintfと同じ使い方ができるデバッグ出力用の関数を作りました。 コード #include <stdarg.h> void debug_printf(const char *format, ...) { if(debug_mode){ // 可変引数を処理するための準備 va_list args; va_start(args, format); // デバッグメッセージの前に追加する文字列 printf("033円
こんにちは、高崎@アノテーション です。 はじめに X にて下記のポストがありました。 ちょっと興味があったので、ソースを取得して少し掘ってみたので記事にします。 動作環境 動作環境については、下記をベースとします。 Ubuntu 24.04 LTS CPU x86_64 下記のソースの printf で考えてみる #include <stdio.h> #include <stdlib.h> int main() { printf("Hello, world.\n"); return 0; } wataru@ubuntu-24-04:~$ ldd --version ldd (Ubuntu GLIBC 2.39-0ubuntu8.3) 2.39 Copyright (C) 2024 Free Software Foundation, Inc. This is free software;
While C can provide "convenient" string formatting by having hideously unsafe variadics, and dynamic languages, like python, can do the same, many type safe languages, such as Rust, are forced to provide such functionality through the use of a macro. Dependently typed languages, like Idris, can provide a printf like formatting interface, while maintaining both memory and type safety, without the n
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く