マガジンのカバー画像

C言語

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

#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言語 間違い探し

C言語 間違い探し

今日出くわしたバグである。
できたてのホヤホヤだ。
#include <stdio.h>int main(){ const static char* name[] = { "aaa" "bbb" "ccc" }; printf("%s\n", name

もっとみる
カーニハン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言語と遊ぶ strchr

こちらの記事がきっかけで。
C言語を盛り上げるためにも、たくさんの記事を書きましょう!

そんでもって、ちょっと変えてみたわけです。

const char* c_strchr(const char* s, int ch) { for (;;) { if (*s == '\0') { return NULL; } if (*s == (char)ch) {

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

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

前回の続きである。

その前回において、

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

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

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

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

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

私がC言語を好きな理由

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

ポインタ変数があるから

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

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

もっとみる
C言語教室 第34回 - 型修飾子あれこれ(回答)

C言語教室 第34回 - 型修飾子あれこれ(回答)

こちらの記事の課題回答です。

なんだか、いきなり第34回まですっとばしてしまった気もするけど。

課題char s[] = “abcdefg”;const char *p = s;char * const q = s;

このとき、pとqで何が違うのかを説明しなさい。

回答p はポインタの先のデータを変更できなくて、
q はポインタそのものを変更できない。

コードで書くとこんな感じ。

in

もっとみる
マージソートプログラムのカバレッジを測定してみた

マージソートプログラムのカバレッジを測定してみた

プログラムを作成すると試験を実施するが、全てのルートを試験できているのかどうかが懸念される。最近ではカバレッジツールも増えてきていて、フリーで使用できるものもある。

とはいうものの、C言語のカバレッジは実は少し難しい。CPUそれぞれのネイティブコードを作成するものだから、マシンコードが実行されたのかどうかを判定しなければならず、CPUに依存するところが多くあるためである。このような状況にあって、

もっとみる