マガジンのカバー画像

C言語

63
C言語に関するあれこれ
運営しているクリエイター

#プログラミング

C言語 間違い探し マニアック編 「機能 = 0」はどこへ消えた?

C言語 間違い探し マニアック編 「機能 = 0」はどこへ消えた?

「上級編」にしようかと思ったけど、「上級編か?」と思い直し「マニアック編」とした。
一番の理由は「環境依存する」ということである。
故に、コードをコピー&ペーストして実行しても同じ現象が発生しない可能性がある。

更に、C言語のあまり見慣れない仕様も関係している。私はこの仕様を利用したコードをみたことがない(と言っても井の中の蛙であるが)。

先日のC言語記事にコメントいただいた内容である。

もっとみる
カーニハンCを読む 第1章 やさしい入門(2)

カーニハンCを読む 第1章 やさしい入門(2)

前回の続き。
前回?
前回っていつだっけ?

変数の宣言は関数の初めにそうなのよ。関数の初めに宣言しておかなければならなかったのよ。かつては。ところが、今ではどこで宣言してもOK………なのか?
JISX3010 P.70 「6.7 宣言」の制約にはそのようなものがなかった。
clang も、次のコードに対して何ら警告を発しない。

void test1(){ int i = 3;

もっとみる
C言語 間違い探し 答え編

C言語 間違い探し 答え編

こちらの記事の答えである。

そもそも、いったい何を間違ったのか再掲すると、例外を引き起こしたのはこのコードである。
#include <stdio.h>int main(){ const static char* name[] = { "aaa" "bbb" "ccc"

もっとみる
カーニハンCを読む 第1章 やさしい入門(1)

カーニハンCを読む 第1章 やさしい入門(1)

先日、演算子の優先度について改めてカーニハンCを読んでみたが、なかなか懐かしくもあってもう少し読んでみようかという気になった。

本の初っぱなが『第1章 やさしい入門』である。

第2章以降は次のように言語の規約に準じた記載になっているが、まずはプログラミングに親しむようにと『やさしい入門』が先にきている。

第1章 やさしい入門
第2章 データ型・演算子・式
第3章 制御の流れ
第4章 関数とプ

もっとみる
JISX3010を読む 日本語がムズイんですけど

JISX3010を読む 日本語がムズイんですけど

わりとシツコイ質です。
JISX3010の記述も気になってくるわけで。

国際標準化機構(ISO)の日本語版がJISなのだそうだ。最近はC言語を書いていてもほとんど同じパターンの書き方しかしないので、わざわざ規約を紐解くこともない。久しぶりに読んでみたら面白いやら唸るやら首を傾げるやらという有り様である。

とにかく。

日本語がよくわからへんねん…

JISXには次のような記載があるよくわからな

もっとみる
カーニハンCを読む ついでにJISXも読む 優先度と評価順序 多分わかったんじゃないか劇場

カーニハンCを読む ついでにJISXも読む 優先度と評価順序 多分わかったんじゃないか劇場

先日来より、C言語の演算子の優先順位でバタバタしていたんだが、kznさんから「JISを読んでみたら?」とコメントいただいて、JISで「優先」を検索してうんうん唸っていたら、ふと視界が開けた気がする。
だからネットって面白い。

kznさんから教えていただいたJISはこちら。

私のバタバタ記事はこちら。

C言語の「++(後置)」は優先順位が高いのであるC言語のインクリメント演算子である「++(後

もっとみる
カーニハンCを読む 2.12 優先度と評価順序

カーニハンCを読む 2.12 優先度と評価順序

カーニハンCというのは、次の書籍のことである。

プログラミング言語C
B.W.カーニハン、D.M.リッチー著 石田晴久訳

先日書いた記事で演算子の優先順位等々についてなんだかモヤモヤしたので、元祖を引っ張り出してきた次第である。カーニハンCは、私がC言語を始めた頃はバイブルと言われた。C言語に関する本は数あれど、本書が元祖だと言って差し支えない(と思う)。

-----------------

もっとみる
だからCってやつは *p++

だからCってやつは *p++

先日書いたC言語の記事で次のようなコードが出てきた。

*p++

こんな書き方ができるのはC言語だけじゃね?
と思うくらいC言語的なコードである。

私はこのコードが非常に苦手で理解に苦しむんだが、さらには環境依存もしそうであって今までは書いたことがない。主に組み込みの開発をやってきて、たまにCPUが変更になるようなこともあり、その時には往々にしてコンパイラも変わるしということで、どんなコンパイ

もっとみる
私がC言語を好きな理由 ポインタ変数が必要なデータ構造って?

私がC言語を好きな理由 ポインタ変数が必要なデータ構造って?

前回の続きである。

その前回において、

ポインタを持たないプログラミング言語でもポインタは使っているはずだ

と書いた。ポインタを使った方がシンプルで高速で汎用的になる構造というのがある。が、前回はそれを書かなかった。今回はそれを書いてみようかと思う。

例えば、配列例えば、ここに1つの配列があるとする。

char data[20] = {0, 4, 7, 8, 13, 14, 26};

もっとみる
私がC言語を好きな理由

私がC言語を好きな理由

私がC言語を好きな理由。

ポインタ変数があるから

これにつきる。
C言語しか使っていなかった当初はわからなかったが、いくつかの言語に触れる都度、ポインタ変数が欲しくなる。やりたいことができない。もどかしいことこの上ない。どうも私は、何か制約があるのが苦手なようである。

ポインタを持たない言語たちjavaにも、VBにも、C#にも、Pythonにもポインタ変数はない。ないのではあるが、ポインタ変

もっとみる
C言語教室 第27回 いろいろなソート(続)(回答提出)(2)

C言語教室 第27回 いろいろなソート(続)(回答提出)(2)

こちらの記事の2回目の回答です。

課題前回は(既に1ヶ月くらい前になりますが)、課題1を提出しました。
今回は、課題2です。

前回のリストをアレンジすればいいのだけど、リストと違って文字列配列は繋ぎかえが容易ではない。

(1)いったん別の配列にマージして、
(2)マージが完了したら元の配列にコピーして戻す

という手順を取らざるを得ない・・・かな。

ソースコード#include <stdi

もっとみる
C言語教室 第26回 - いろいろなソート(回答提出)

C言語教室 第26回 - いろいろなソート(回答提出)

こちらの課題回答です。

思いっきりサボりまくって、課題記事のコードを流用し、ちょっとだけ修正して終わりました。文字列はどうしようかと悩みに悩んで(笑)、好きな小説からの引用です。古典の名作。

課題記事のコメントで遊月さんも仰っていましたけど、私が把握していたバブルソートもこれとは少し違います。それについてはまた改めて書いてみようかな。

コード#include <stdio.h>void bu

もっとみる
【C言語】シグナルの0除算のこと

【C言語】シグナルの0除算のこと

先日、こちらの記事の答案を考えていて、シグナルに「0除算」があることを知りました。CPUの例外割り込みで「0除算」は見たことがあったけど、C言語のシグナルにあるとは驚きです。なので、早速試してみました。試してはみたのですが・・・。

シグナルが発生しない・・・。

となると、またまた「なんでなんで?」と思ってしまうわけで。
少々調べてみました。

結論から言うと、私の環境では「0除算」は例外になら

もっとみる
C言語教室 第25回 - コールバック関数(回答提出)

C言語教室 第25回 - コールバック関数(回答提出)

こちらの課題回答です。

ずいぶん昔に「ctrl+c」をきかないようにしたことがあったような気がする。もしかしたら、前世紀のことかもしれない(笑)。無効にすることが目的だったのでハンドラは持たなかったかもしれない。

今回は、
「signal」ではなく、
「sigaction」を使ってみました。

とあったので。

改めてシグナル機能を見るといろんなハンドラがあるのね。

課題より少し手をのばして

もっとみる