タグ

Cに関するtakehikomのブックマーク (70)

  • リーナス・トーバルズ氏、Linuxカーネルの開発を「C89」から「C11」に移行方針へ | スラド Linux

    C89からC11だと間に C99があります. C99で標準化された機能でカーネルコードに影響がありそうなものは - 可変引数マクロ. __VA_ARGS__ 使うやつ - designated の初期化. struct A { int hoge; int fuga}; A a = { .hoge = 1, .fuga= 2}; って書けるやつ - 可変長配列 - サイズゼロ配列 - for (int x=0; x<10; ++x) って感じでローカル変数が宣言できるやつ などがあります. 最後の for文内でローカル変数が宣言できる機能が,今回のC89からC11に移行するきっかけになった新機能です. LKMLの議論だと,全部のメールを読んだわけではありませんが流し読みした感じでは C89からC99に移行しようと言う話になって,どうせならC11にしたら?って流れになってました. ただし上記の

    takehikom
    takehikom 2022/03/08
  • 遠藤を守くん on Twitter: "学校のC言語のテスト 意味不明過ぎwwww https://t.co/Hgrw0WA10O"

    takehikom
    takehikom 2021/06/18
    『変数の宣言はブロックのはじめに行う』C89か?
  • C言語で OpenSSL の SHA256 ハッシュ関数を使ってみる

    どうも、たくチャレ(@takuchalle)です。 C言語で OpenSSL の SHA256 ハッシュ関数を使ってみました。 その時の作業メモです。 動作環境 Ubuntu 16.04.6 LTS clang version 8.0.0 (tags/RELEASE_800/final) OpenSSL 1.0.2r 実装例 #include <stdio.h> #include <openssl/sha.h> int main(int argc, char *argv[]) { char *message = {"Sample Message"}; unsigned char digest[SHA256_DIGEST_LENGTH]; SHA256_CTX sha_ctx; SHA256_Init(&sha_ctx); // コンテキストを初期化 SHA256_Update(&sha_c

    C言語で OpenSSL の SHA256 ハッシュ関数を使ってみる
    takehikom
    takehikom 2021/06/09
    『#include <openssl/sha.h>』
  • C言語(標準)にM_PIは無い - 簡潔なQ

    C言語で円周率πを使うには M_PI を使う、と経験で知っている人は多いが、あれは実はC言語の規格には含まれていない。むしろ、処理系がM_PIを定義してはいけない事情(c - Using M_PI with C89 standard - Stack Overflow)がある。 ここでは、C言語の最新規格であるC11と等価なN1570 (http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf) を参考にする。これより古いC言語の規格でも同様だと思われる。 C言語の規格では、まず「標準に準拠したプログラム」は何かということを定義し、続いて「標準に準拠した処理系」は何かということを定義する、という手順を踏んでいる。 Strictly conforming program Strictly conforming programとは、最も移

    C言語(標準)にM_PIは無い - 簡潔なQ
    takehikom
    takehikom 2020/12/25
  • エラー内容の取得:Geekなぺーじ

    エラーが発生したときにエラーの原因を知ることはデバッグなどの観点から非常に重要になります。 ここでは、エラー内容の取得方法を説明したいと思います。 perror プログラム中でエラーが発生したときには、perrorを利用してエラー内容の出力が出来ます。 perrorを使うと、標準エラー出力にエラー内容を書き出してくれます。 標準エラー出力へのメッセージの出力ではなく、数値としてどのようなエラーが発生したかを知りたい場合には、errnoが利用できます。 errnoには、最後に発生したエラーの内容が数値として保存されています。 errnoの変数自体はライブラリの中で宣言されています。 そのため、extern int errnoとして利用します。 変数errnoはerrno.hをincludeすれば利用できるようになります。 失敗するソケット作成 では、実際にsocketシステムコールを失敗させ

    takehikom
    takehikom 2020/11/04
    『変数errnoはerrno.hをincludeすれば利用できるようになります』
  • MS-DOS(PC-98)のアプリケーションをC言語で作る - 少ないリソースを酷使する

    前回の記事でPC-98エミュ+FreeDOSの環境でMS-DOSアプリが動くことを確認した. となると,あと思うことは1つ. MS-DOSのアプリケーションを自作したい! ということです. 今回はC言語でMS-DOSのアプリケーションを作ってみましょう. 環境 OS:Ubuntu 20.04 PC-98エミュ:xnp2kai rev.22 d3fe02a FreeDOS(98):20200709更新のHDI形式 Cコンパイラのinstall i8086版GCC フリーのCコンパイラと言えばGCC.便利ですよね. しかし,少し前までGCCは32bit || 64bitのアーキテクチャしかターゲットにしてきませんでした. なので16bitPC-98x1向けのバイナリは生成できなかったわけなんですよね. それが最近,ついに16ビット版GCCが登場しました.しかもDOS環境特化. 詳しい話は以下

    MS-DOS(PC-98)のアプリケーションをC言語で作る - 少ないリソースを酷使する
    takehikom
    takehikom 2020/10/28
    『ia16-elf-gcc -march=i286』
  • C言語とマークの読み方(C言語プログラミング 付録 )

    戻る(Z) 記号とC言語の読み方 C言語で使う記号,キーワード,関数,その他の読み方を勝手に纏めた一覧表です。 一般的なもの、俗語的なものなどいろいろありますが、参考までに以下に掲げておきます。 記号 俗語的読み方 読み方 -------------------------------------------------------------------------------- ! ・・・・・・ビックリマーク・・・・・・・・エクスクラメーション, 感嘆符 " ・・・・・・ダブルクォート・・・・・・・・ダブルクォテーション,double quote,二重引用符,quotation marks # ・・・・・・イゲタ,シャープ・・・・・・・シャープ,ナンバー(number sign),井桁,hash,sharp,嬰記号 $ ・・・・・・ダラー・・・・・・・・・・・・ドル(dollar si

    takehikom
    takehikom 2020/10/21
    strlen/ストリングレン/ストラレン エスティーアールレン
  • 「この位置にprintfが無いとなぜか動かないんだ。」 - Qiita

    はじめに 先日ツイッターで見かけた呟き pic.twitter.com/33Yk02hu1U — TOMO (@tomozh) October 14, 2020 そういうこともあるのか的な反応もあるようなので具体例を挙げてみることにする。 例1 所謂FizzBuzz問題。 #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が無いとなぜか動かない fizzbuz

    「この位置にprintfが無いとなぜか動かないんだ。」 - Qiita
    takehikom
    takehikom 2020/10/20
  • printf() に float/double を渡したときの挙動と %lf の意義 - Qiita

    初心者向けの話。 この文書では、 C11 の規格として n1570 (Committee Draft) を参照する。 TL;DR C 言語において、 printf() 等の可変長引数関数の可変長引数として float を渡した場合、 double へと自動で変換される (→ default argument promotion) つまり、 float が渡されても double が渡されても、 printf() 内部からはどちらも double に見える 規格 (C11) においては、 %f, %lf ともに double を表現するものとして規定されている おまけ: long long int には %lld を使うが、 long double には %Lf を使うことになっている std::printf, std::fprintf, std::sprintf, std::snprint

    printf() に float/double を渡したときの挙動と %lf の意義 - Qiita
    takehikom
    takehikom 2020/09/26
  • 【サンプル有】C言語とは?特徴やできることなどを解説! | IT・エンジニア派遣のModis

    C言語は歴史が古く、プログラミング言語の中でも非常に知名度の高い言語の一つです。また、C系言語と呼ばれる派生言語の始祖でもあり、コンピュータを使用して行うことの大半はC言語で実行できるといわれるほど高い汎用性を持っています。プログラムの自由度が非常に高く、アプリの開発から機械制御まで幅広い分野で活用されている点が特徴です。 C言語はハードウェアの制御知識を必要とする面があるため、初心者にはハードルの高い言語ではありますが、その汎用性の高さからいまだ衰えない需要と人気があります。今回はC言語の概要や特徴、基礎知識とサンプルを解説していきます。 C言語とは? C言語の歴史 C言語は、AT&Tベル研究所のケン・トンプソン氏が開発したB言語の改良として、同所のデニス・リッチー氏が主体となって開発した汎用プログラミング言語です。 UNIX(ユニックス)(コンピュータ用のマルチタスク・マルチユーザーの

    【サンプル有】C言語とは?特徴やできることなどを解説! | IT・エンジニア派遣のModis
    takehikom
    takehikom 2020/05/28
    ループのコードで使用している「++」の説明もあれば
  • なぜCを学ぶべきなのか - 立命館大学情報理工学部セキュリティ・ネットワークコース プログラミング言語サポートページ

    プログラミング言語としてのCは、初学者にとっては難しい言語であるのは確かです。中には、初心者が学ぶべき言語ではないと言い出す人もいます。ですが、私たちセキュリティ・ネットワークコースの教員は、我々のコースの学生は早期にCを学ぶべきであると考え、このカリキュラムを設定しています。以下に理由を列挙します。 Cはコンピュータの構造に深く根ざした言語なので、コンピュータそのものの学習を同時に進めることで、相互の理解が深まると考えています。例えば主記憶(メモリ)上にプログラムとデータの双方が置かれるフォン・ノイマンアーキテクチャや、メモリ上のデータ配置の問題、エンディアンの問題などを直接感じられるのはCならではだと思います。 CはOSや、コンパイラなどの言語処理系、組み込み機器などで広く使われており、その構造や動作と深く関わっているため、セキュリティとネットワークの理解のために欠かせないからです。

    なぜCを学ぶべきなのか - 立命館大学情報理工学部セキュリティ・ネットワークコース プログラミング言語サポートページ
    takehikom
    takehikom 2020/05/26
    2038年問題への対応というのはなるほど/末尾のリンク先ではサンプルコードの豊富さを挙げているがここには見当たらず
  • wood ROBO on Twitter: "自分の高専生活史上、一番のりにのってるテストを発掘した。 「hello worldを100回表示せよ。」という問題に対して、whileやforを使わずに解答したやつ。 do使った方がいいよ。っていうのはつっこまないでおくら。 https://t.co/K6XEmI8lXD"

    自分の高専生活史上、一番のりにのってるテストを発掘した。 「hello worldを100回表示せよ。」という問題に対して、whileやforを使わずに解答したやつ。 do使った方がいいよ。っていうのはつっこまないでおくら。 https://t.co/K6XEmI8lXD

    wood ROBO on Twitter: "自分の高専生活史上、一番のりにのってるテストを発掘した。 「hello worldを100回表示せよ。」という問題に対して、whileやforを使わずに解答したやつ。 do使った方がいいよ。っていうのはつっこまないでおくら。 https://t.co/K6XEmI8lXD"
    takehikom
    takehikom 2020/04/02
    doを使ったらwhileを書くことになる/dの右の赤は、セミコロン忘れで-2としたけれど、なくても問題なく動作するということでマルになったっぽい
  • C言語のポインタの威力と美しさを示せる最も短く理解しやすいコードは何ですか? - Quora

    takehikom
    takehikom 2020/03/02
  • C言語の文法に関する質問です。定数を宣言する方法に#defineを使う方法とconstを使う方法がありますが、両者はどのように使い分ければ良いのでしょうか?分かりやすく説明していただけると幸いです。

    回答 (2件中の1件目) C言語でのコンパイルの各段階 Phases of translation において、#defineで定義するマクロの定義と展開はフェーズ4で実行されます。constの解釈はフェーズ7です。 マクロの置換は早期の段階に行われ、概念的にテキストとしての(最高でも字句レベルでの)切り貼り操作に近いものになります。それにより、たとえば展開結果の文法チェック、識別子のスコープチェック、型チェックなどはマクロの段階では行われず、文法に沿わない展開も可能です。ミスを含みやすくエラーメッセージも分かりにくくなりがちです。コンパイルのフェーズも別なので、コンパイラはマクロ展...

    C言語の文法に関する質問です。定数を宣言する方法に#defineを使う方法とconstを使う方法がありますが、両者はどのように使い分ければ良いのでしょうか?分かりやすく説明していただけると幸いです。
    takehikom
    takehikom 2019/06/28
    被リンク
  • C99の仕様

    長い歴史を持ちながら、依然として人気の高いC言語。その最新仕様の情報にキャッチアップするための連載スタート。今回は1999年に策定された「C99」を取り上げる。 連載 INDEX 次回 → C言語(以降、単にC)はDennis Ritchieによって1969~1973年の間にベル研にて開発されたプログラミング言語である。長い歴史を持つと共に非常にポピュラーな言語で、プログラマーでCを知らない人はまずいないと言っていいだろう。プログラミング言語のシェアを調査しているTIOBEでも、ここ最近は常に1、2位を占めている。 Cの言語仕様は今から25年近く前である1989年に初めて規格化され、これは一般に「ANSI-C」と呼ばれている。ANSI-Cは長らくCの言語仕様のスタンダードの位置を占め、世の中の大半のプログラマーは、このANSI-Cに慣れ親しんでいることだろう。しかし、実はCの言語仕様はその

    C99の仕様
    takehikom
    takehikom 2017/11/12
  • Cのプロダクトを作るためにやったこと - Tomohisa Oda

    今年に入って Octopassというプロダクトを公開しました。それは、Linuxのユーザや権限をGithubのTeamと連携して運用を楽にするというツールでした。色んな方々のご協力により、多くのRetweetやはてぶいただいたことで、ある程度、Octopass を必要としそうな人の目に触れたのではないかと思っています。(Githubのスター数が少ないのは今後の課題)その中で「すごく便利」「ぜひ導入したい」というフィードバックは、継続して機能追加していくというモチベーションにつながっていて、非常にありがたいです。 さて、この Octopass は、Linuxユーザ名前解決をするためにの glibc の libnssモジュールをCで実装しています。cgoやその他の言語でShared Objectを吐き出しても良かったのですが、それだと技術的挑戦が足りないとして、触れてこなかったCに挑戦しました

    Cのプロダクトを作るためにやったこと - Tomohisa Oda
    takehikom
    takehikom 2017/03/08
  • 組み込みC言語における定数の作り方について(前半) - stacked tip that high

    C言語の定数の作り方 組み込みC言語を書いていると、定数をどう作ろうかと迷うことがあります。 最新のC言語では、定数の作り方は3つある*1。えっ?2つじゃないの?僕もそう思っていましたが、以下のサイトでは3つと紹介されています。言われてみれば、まぁ確かに。 #define const enum 具体的には以下のように使います。 /* #defineを用いる場合 */ #define VAR 10 /* constを用いる場合 */ const int var = 10; /* enumを用いる場合 */ enum{var = 10}; で、上記のサイトでは、プログラミング質問サイト「スタックオーバーフロー」のリンク先の書き込みを紹介しています。 c - "static const" vs "#define" vs "enum" - Stack Overflow 結論から言えば、 多くの場合

    組み込みC言語における定数の作り方について(前半) - stacked tip that high
    takehikom
    takehikom 2017/02/05
    リンク感謝
  • ツイッターで出題した未定義問題のお詫びと調査と解説について - paiza times

    Photo by Alan Becker Capuyá 青木です。 先日、paizaのツイッターアカウント(@paiza_official)で出題した四択問題について、皆様からたくさんのご指摘・ご批判をいただいたので、その経緯と結論をお伝えします。 次のような問題を考えて出題しました。 int i = 0; のときに評価値が1になるのは— paiza[パイザ] (@paiza_official) 2016年12月26日 【補足】C言語,C++,Javaを想定しています— paiza[パイザ] (@paiza_official) 2016年12月26日 当初は、それぞれの評価値は順に2, 3, 1, 2となり、3つめの"i++ + i++"の選択肢が答えとなることを想定していました。 ですが、しばらくすると、次のようなリプライやツイートをいただきました。 全部C(たぶんC++/Javaも)だ

    ツイッターで出題した未定義問題のお詫びと調査と解説について - paiza times
    takehikom
    takehikom 2016/12/28
    4択見て「副作用完了点」が思い浮かぶ/C++17でOKになったんか/やっぱ未定義なのか
  • 初心者が陥りやすいエラー、コンパイルエラー解消法(C言語編)まとめ | プログラミング教育ナビ

    変数名’ undeclared undeclaredとは、「申告していない」という意味。つまり、このエラーメッセージは「宣言されていない変数を使っていますよ」と言っています。 C言語の処理中で変数を使用する場合は、使用前に必ず変数宣言をしなければいけません。変数の宣言漏れがないか、変数名のスペルを間違えていないかを確認してみましょう。 undefined reference to `関数名’ 直訳すると「`関数名’への未定義の参照」。定義されていない関数を呼び出そうとしている時に起こるエラーです。 関数名のスペルミスはないか、関数を定義しているヘッダファイルのinclude漏れがないか、リンクするライブラリの指定を誤っていないか確認してください。 invalid preprocessing directive 無効なプリプロセッサがある場合に表示されます。プリプロセッサとは、ソースプログラ

    初心者が陥りやすいエラー、コンパイルエラー解消法(C言語編)まとめ | プログラミング教育ナビ
    takehikom
    takehikom 2016/12/27
    『Buffer overrunとBuffer overflowは同じ意味で使われることが多いのですが、前者は「止まるべき所で止まらず、先へ進んでしまった」エラー、後者は「データが溢れてしまった」というエラーです』
  • http://harold-spm.com/cgengo-content/

    takehikom
    takehikom 2016/04/26