C言語

C言語が難しいのか、それともCプログラミングが難しいのか?

問い:C言語は難しいか? 答え:C言語の言語仕様自体は難しくないが、C言語でのプログラミングは難しい(私見)。C言語が簡単なのか難しいのか問われた場合、C言語の「なに」の難易度について問われているのか考えなくてはならない。 C言語そのものは難しく…

「プログラミング経験者向けのCプログラミングの入門書」が欲しい

タイトルに書いたことが全てだが、思考の整理を兼ねて、もう少し深掘りしてみたい。以下に示す要求に合致した書籍の類を探しているのである: C言語(言語仕様)よりも「C言語を用いたプログラミング」に主軸を置いた内容。 最低でもC99、できればC11/C17の…

Raspberry Pi向けのクロスコンパイル環境の整え方 2022年夏

4年ほど前にRaspberry Pi向けのC/C++クロスコンパイル環境を整えたのだけど、当時と今では環境構築の方法が異なるようだ。ということで、現時点(2022年8月)での「Linux上でRaspberry Pi向けクロスコンパイル環境を構築する方法」についてメモを残しておく…

『プログラミング言語C』とは何であったか?

言語ではなく本の話である。ついでに言えば第2版の方。最近、新人向けのC言語の本として『プログラミング言語C 第2版』を推そうとする声にストップをかけたのだが、その辺を含めて、この本についての2020年時点の個人的所感を書き残しておこうと思う。プログ…

「C言語書けます」のボーダーラインはどこか?

「C言語を覚えると組込み系の採用に有利」みたいな就職・転職向けの文言を見る度に、世の中そんなに甘くないと言いたくなるのです。多分、組込み開発に限らず、例えばLinuxコンソールアプリ等でC言語を散々使った人も同意するのではないかと思うのだけど、C…

「組込み開発=C言語」というイメージはどこまで正しいか?

組込み開発でのプログラミング言語というとC言語(時にアセンブラ)が真っ先に挙げられる気がするのだが、実務的にどこまで正しいのか書いておこうと思う。結論から言うと、組込みプログラマの立場としては「組込みプログラミング=C言語」は概ね正しいのだ…

俺のhcaslがこんなに遅いわけがない

id:eel3:20151102:1446476928 のhcasl、TDM-GCC 4.8.1でビルドしたC言語/C++版バイナリを手元のCygwin(64bit)で実行すると激遅なの。 $ make -f Makefile_mingw g++ -finput-charset=cp932 -Wall -std=c++11 -pedantic hcasl.cpp -o hcasl $ time perl -e…

8つの言語でテキストフィルタを書き比べた

※2015/11/15追記:現段階では8言語から12言語に増えている。その昔 id:eel3:20120129:1327845759 なんてことをやったのだが、性懲りもなくまた同じようなことをやってみた。作ったものはこちらに置いてある。 GitHub - eel3/hcasl: Command line tool for "h…

C Puzzles(C言語パズル集)の個人的解答

C Puzzlesの日本語訳があったので、解いてみた。 原文 C PUZZLES, Some interesting C problems 日本語訳 C言語パズル集:Cにまつわる興味深い問題あれこれ | POSTD 夏休み中に解いたので、一応「夏休みの課題」になるのかな。とりあえず、所詮は自称Cプログ…

設定ファイルとして使うためのLua組み込みあれこれ

Cで書いたアプリケーションにLuaを組み込む機会があったので、メモを残しておく。具体的な組み込み方(LuaのC APIの呼び方など)はネットに出回っているし、本も何冊か出版されているので、それ以外について書き記そうと思う。タイトル名の通り、設定ファイ…

rand(3)の使い方(C/C++での擬似乱数取得方法)

どうも一部で微妙に盛り上がったらしい。 xcode - c言語での乱数生成 - スタック・オーバーフロー Mac、iOSで、rand()関数の疑似乱数アルゴリズムがヘン! - Qiita なので書いておく。 rand(3)の特徴 CやC++の標準ライブラリにはrand(3)という擬似乱数を生成…

Gotoサンの話。結局のところ「goto禁止」はどういう話だったのか?

C言語で書かれた大量のソースファイルをサンプルとして、現実でのgoto文の利用方法について調査した研究の結果が発表されたようだ。 C言語の開発者によるgoto文の使い方を対象とした実証研究の結果、「goto文は無害だと考えられる」 | スラド Empirical Stud…

C言語のバグ回避をするための習慣:私の場合

こんな記事がアップされていた。 C言語のバグ回避をするための習慣 - Qiita 「へぇ」「ふーん」という感じに眺めていた訳だが。自称職業Cプログラマ*1の自分の場合はどうだろうか? 実は、保守的ながらも意外とツールに頼っている。機械に任せられるところは…

引数をとらない関数の仮引数にvoidを書くべきか、書かざるべきか?

本エントリ名のような質問にたいする回答をよく忘れてしまうので、ここにメモしておく。仮引数にvoidを書く/書かないについては、C言語とC++で言語仕様での扱いが異なる。C言語の場合は、関数の宣言か定義かによっても差異がある。この違いを表にするとこん…

テキストレコードのフィールドにセパレータを含むデータを埋め込みたい

問題編 テキストデータを、改行区切りのテキストレコードに埋め込んで出力したい。例えばusp Tukubaiでいうところのネーム形式やフィールド形式のフィールドの値として出力したい。問題は、元データに改行が含まれている可能性があることだ。また、フィール…

プロトタイプ宣言の仮引数にconst修飾子がなかった話

関数の仮引数(整数型)にて、プロトタイプ宣言にはconst修飾子がついておらず、関数本体にはconst修飾子がついていたとする。この状態でコンパイルしてリンクしてみたらどうなるだろうか? コンパイル/リンク時にエラーになるのか、警告が出るのか、スルー…

Windows PowerShellの罠――trap文概論

PowerShell 1.0の頃から例外処理用にtrap文が用意されていて、これがまた興味深い。trap文の元となったのは、おそらくBourne shellの系統のシェルに用意されている組み込みコマンドtrapだろう。『Windows PowerShellインアクション』1.2.1によれば、PowerShe…

MISRA-Cにおける「関数の末尾以外の return 禁止」の真意

MISRA C という失敗 (#2295472) | コーディング標準は役に立つのか | スラド 早期returnとMISRA-Cルール14.7は背反か否か. - TogetterMISRA-Cはそもそも、 どのルールを守り、どのルールから逸脱するのか検討し、決定する。 上記の決定内容とその理由(順守…

ヌルポインタ定数がヌルポインタと解釈されない時──CとC++のヌルポインタ定数をめぐるメモ

これを見て、 リリカル☆Lisp開発日記 » Blog Archive » 恐怖! 64bitと0と可変長引数の組み合わせ 最近は『CプログラミングFAQ』を読む人も少ないのだろうかと思ったのだけど、よく考えればあの本はまた絶版になってるんだよなあ。それに例えばC言語を経ずにC…

結局、C言語のポインタはどこが難しいのか?

何やら最近C言語のポインタが熱いらしいので、自称Cプログラマとして書き残しておこうと思う。私はポインタについて余り苦労することなく使ってきた人で、というかむしろポインタが無いと困る。構造体を引数にとる関数の仮引数はポインタで、リストやツリー…

構造体の定義のネストで移植性の壁に衝突した話。extern "C" にも限界はあるのさ……。

C90相当のC言語で実装したライブラリがありまして、C++でアプリを作る際にこいつをちょろっと使っちまおうと考えたわけですな。ところがそのライブラリのヘッダファイルにこんな感じの構造体の定義が書かれていたのです。なんてことでしょう。 /* test.h */ …

「クリップボードのテキストをGnuPGで復号化」の代替品を作る

問題編 仕事でGnuPGを使用している。Windows上で使うこともあり、今までは古いWinPT*1を使用していた。鍵の管理はWinPT経由で行い、メールの暗号化/復号化にはEnigmailを使用し、ファイルの暗号化/復号化は内製のツールを使用していた。古いWinPTを使って…

シェルもどきな簡易コマンドパーサ……を改造して整理してモジュール化してみた

id:eel3:20111122:1321888361 で試作したパーサはコメントに対応していないし、実装が試作アプリ自体に密着しているので他のプログラムに組み込むのに少々手間がかかる。そこでソースを整理してCのモジュールとして切り出してみた。 cmd_parser - Unixシェル…

シェルもどきな簡易コマンドパーサを試作した

ちょっと事情があって、バッチファイルやシェルの簡易版みたいな構文のパーサが欲しくなった。作りたいツールの内容的に、簡単なコマンド(というかスクリプト)で操作するようにしたいのだ。多分調べ方が不十分だと思うのだが、この手のパーサのライブラリ…

HTTPでコンテンツを取得するサンプルアプリを書いてみた

エントリ名の通り。もっとも完成したのは2週間以上前だけど。 httpget - HTTPでコンテンツを取得するサンプルアプリ ソケットプログラミングのサンプルソース(TCPクライアント版)で、仕事絡みなのでC言語で書いている。切欠は仕事絡みだけど趣味と実益を兼…

「A && B || C」の評価結果に気をつけろ:"warning: suggest parentheses around '&&' within '||'"

もう5年以上C言語でコードを書いていて、しかも今ではそれで収入を得ている身だというのに、実は今まで「A && B || C」がどう評価されるのかイマイチ確信を持てていなかった。いや、Cの論理演算子は左から右に順に評価していくとか短絡評価されるとか、その…

C/C++のソースでよく見られる1文字変数の一覧表(私案)

世の中には1文字変数という文化がある。個人的には基本的に余り歓迎したくない類のもので、私個人の見解としてはせめて、 適用範囲が比較的小さい場合に限り、 特定の用途でのみ使用する。 という制限を付けたいと考えているものだ*1。1文字変数は、ソースコ…

仕事でC言語を使う人の為の基礎教養的な10冊

私のポリシー*1として、 何事にも半歩以上遅れて反応する。 意外とビーンボール気味。 が挙げられるようなので、今頃になって本を挙げてみる。仕事でC言語を使う場合に基礎教養というかC言語にまつわるベーシックな部分で読んでおくべきだと思う本10冊だ。ち…

某社のプログラミング問題の解答例をC言語化して実行速度を比べてみた

id:eel3:20100502:1272780085 や id:eel3:20100502:1272783601 で書いたRubyによる解答例を実行すると、手元の環境では3〜4分程度かかる。 PC DELL Latitude D630 CPU Intel(R) Core(TM)2 Duo T7250 @ 2.00GHz Memory DDR2 (PC2-6400) 2048MB*2 (Dual Channe…

ANSI C89/ISO C90縛りでメールアドレスのフォーマットチェック関数を書いてみた

タイトル通り、必死こいて汗水垂らしながら実装した。zlib/libpng ライセンスで公開する。 /* * Copyright (c) 2010 eel3 @ TRASH BOX <dov045a@yahoo.co.jp> * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors b</dov045a@yahoo.co.jp>…