タグ

c言語に関するlocke-009のブックマーク (67)

  • [C言語 #5] 変数① ~ しくみと識別子 ~ - Qiita

    はじめに こんにちは、最近気づいたらもう17時過ぎには真っ暗になってて季節の変わり目が激しいなぁと思ってる者です。今回から 「変数」について取り上げていきたいと思います。 以前では文字や数値を画面に出力する方法を紹介してきました。文字や数値はプログラミングを始めたばかりの方にとっても、それほど違和感無く馴染めるものだったのではないかと思ってます。 今回からはC言語のみならずプログラミングらしい機能である「変数」について見ていきたいと思います。今回はその基となる 「変数のしくみ」 について、みていきましょう。 変数のしくみ プログラムを実行する時、プログラムはコンピュータ(CP)に色々な値を記憶させながら処理をしていきます。一例ですが... というプログラムについて考えてみましょう。 私達人間であれば、お店で商品の値段(数値)を覚え、あとからその値段を紙に書き出すということができます。コン

    [C言語 #5] 変数① ~ しくみと識別子 ~ - Qiita
  • [C言語 #4] 「文字列」と「数値」を触ってみよう - Qiita

    はじめに こんにちは、前回#3で「文字コード」について触れたので 今回は 「文字列」と「数値」 について紹介したいと思います。 文字列について そういえばプログラムだとよく「"文字"」というようにダブルクォーテーションでかこってありますよね 文字1文字に対して、複数の文字の並びを「文字列リテラル(string literal)」といいます。C言語では、文字列は文字と異なり、「''(シングルクォート)」ではなく「""(ダブルクォーテーション)」で括って記述します。

    [C言語 #4] 「文字列」と「数値」を触ってみよう - Qiita
  • [C言語 #3] 文字コード - Qiita

    はじめに こんにちは 今回は久しぶりにC言語を触りたいと思います。 その中でも 「文字コード」 について紹介したいと思います。 そういえばコンピュータは0と1しかわからないんですよね。文字も数値として扱っているんですかね 実はコンピュータの内部では、文字も 「数値」 として扱われています。各文字の形に対応する数値を「文字コード」と言います(charactor code)。 文字コードの種類には様々なものがあります。代表的なものは 「Unicode」 「JISコード」 があります。どの文字コードが使用されているかは、皆さんのお使いの環境によって異なります。 文字コードを使う 今回はC言語で文字コードについて見ていきたいと思います。 エスケープシーケンスである 「¥○○」 や 「¥x△△」 を出力すると、指定した文字コードに対応する文字が出力されます。実際にコードで見てみましょう #inclu

    [C言語 #3] 文字コード - Qiita
  • C言語1000行でテキストエディタを作るチュートリアルをやった

    結果的に1200行を越えましたが。 kilo 成果物はこれ↓ 参考サイトはこれです↓ インスパイア元↓ 感想 C言語は10年ぶりくらいに書いた 進めていくうちになんとなく思い出すことができた 最初にちゃんと授業で学んだ言語なので懐かしく思った Cに出会っていなければプログラミングしてなかったかもしれないので感慨深い しかしこのレベルのメモリ管理は正直たいへん 「この関数で確保したメモリはこっちの関数で開放されるので問題ありません」みたいな この調子でやっていったらバグる未来しか見えない 1000行・1ファイルというコンセプトは良いのだがファイル分けて管理したいナ〜〜と思った 配列や文字列の操作、メモリ管理がやりやすい別の言語で書き直したい Cを書くの大変だな…という感想を持った 速さはともかく他の言語で書きたい もっとimmutableに… お手よりも行数が増えた 1行のif文などでもブ

    C言語1000行でテキストエディタを作るチュートリアルをやった
  • 【C言語】ハァ… 困ったなァ 「未定義動作」にもう疲れちゃって 全然動けなくてェ… - Qiita

    はじめに どうも、y-tetsuです。 以前、こんな記事でお世話になりました。 お久しぶりです。あい変わらずC言語の学びなおしにいそしんでおります! いやー、C言語ってムズカシイですよね。最初は文法がとっつきづらかったり、ポインタでつまずいたり、慣れてきたら慣れてきたで色んな災いが出てきたり…で、結果「もう疲れちゃって 全然動けなくてェ…」っておもわずヘコたれそうになります…。 最近、筆者がC言語を学びなおしてみて新しく知った事としまして、「未定義動作」というものがありました。なんだこれはァ!?という事で少しずつ調べる中で、これがまァー「もう疲れちゃって 全然動けなくてェ…」を引き起こす要素が"満載"な代物でした。 そこで今回は、様々な未定義動作にフォーカスした内容を、ご紹介していきたいと思います。 (正直なところ、ご存じの方からすると何番煎じだよ!?という中身なのですが、筆者自身の自学習

    【C言語】ハァ… 困ったなァ 「未定義動作」にもう疲れちゃって 全然動けなくてェ… - Qiita
  • C言語の知られザル・許されザル仕様 - Qiita

    はじめに どうも、y-tetsuです。 かれこれC言語には、10年以上携わっているのですが、最近ふと学びなおしをしています。 「Cクイックリファレンス第2版」これを完走めざして読み始めました。全816ページの超大作! 先は長いので、日頃からかたわらに置いておき、表紙の牛さん(雌牛)と目が合ったら黙って少し読むようにしています。 言語の"歴"だけは長い筆者ですが、このをちらっと読んだだけでもいまだに知らなかったことが結構潜んでいました。意外と己の"目"ってザルでした。 そんなこんなで学びなおしのため、今回は筆者が感じたままの知られザルそして許されザルなC言語の仕様について、備忘録を残します。 知られザル仕様 恥ずかしながら、今まで存じ上げザルだったシリーズ。 ダイグラフ 名前からして???だったんですが、キーボードによっては存在しない記号を別の2文字で表わすためのものだそうです。 !?…っ

    C言語の知られザル・許されザル仕様 - Qiita
  • C言語をマスターしたい人はGCCのバージョン14を使いましょう - pyopyopyo - Linuxとかプログラミングの覚え書き -

    C言語(C++を含む)を習得したい人,ポインタを勉強したい人はgcc-14を使いましょう.難しいところは gcc-14 が丁寧に解説してくれます C言語の難しいところ 例を示します.C言語で記述された,たった6行のソースコードです int main() { int buf[10]; buf[10] = 0; return 0; } このソースコードには問題があります.初見でわかるでしょうか? : : : 問題があるのは buf[10]=0 の部分です.C言語でやりがちなミスですが,これがバグやセキュリティホールの原因になります. C言語が難しい理由は二つあります.この手の問題を見逃しやすい点と,この手の問題を理解することが難しい点の二つです gcc 14 に解説してもらいましょう 上記の6行のソースコードをgcc14を使ってコンパイルしてみます ソースコードのファイル名は test.c と

    C言語をマスターしたい人はGCCのバージョン14を使いましょう - pyopyopyo - Linuxとかプログラミングの覚え書き -
  • C言語 (GCC) で配列の配置先を切り替えて実行可能にする - Qiita

    このようにデータへのポインタを関数ポインタに変換するのはC言語の規格には違反するみたいだけど、目をつぶってね… #include <stdio.h> unsigned char program[] = {0x89, 0xf8, 0x01, 0xf0, 0xc3}; int main(void) { int (*add)(int, int) = (void*)program; printf("%d\n", add(40, 2)); return 0; } しかし、これを実行するとエラーになってしまった。 yUZ7Mw - Online C Compiler & Debugging Tool - Ideone.com これは、メモリ上でデータを格納する領域とプログラムを格納する領域が分かれており、データを格納する領域にあるデータをプログラムとして実行しようとするとエラーとして落とす設定になって

    C言語 (GCC) で配列の配置先を切り替えて実行可能にする - Qiita
  • 新規格に完全対応したC言語/C++言語対応テストツール最新版

    米国でソフトウェアの品質保証・セキュリティテストサービスを行うParasoft Corporation(以下略、Parasoft社)の国内総販売代理店を務めるテクマトリックスは4月16日、Parasoft社のC言語/C++言語対応テストツール「C/C++test」の最新版2023.2の販売を開始した。 最新コーディング規格に完全対応、「Visual Studio Code」のコードプライング機能を強化 「C/C++test」は、コーディング規約チェックやフロー解析などの静的解析機能と単体テスト、カバレッジ計測、実行時メモリエラー検出などの機能を提供するC言語/C++言語対応のオールインワンテストツール。 最新版では、2023年4月発行の自動車産業向けのC言語ソフトウェア設計標準規格「MISRA C(Motor Industry Software Reliability Associatio

    新規格に完全対応したC言語/C++言語対応テストツール最新版
  • これでわかるC言語の宣言解読法!!(右端導出を用いた方法です) - Qiita

    はじめに 初めまして、私はくまさんです。ただいま、独学でCコンパイラを作成しています。関数型言語は格好良く感じるという理由で使用言語はOCamlを選んでいます。まだまだ必要な作業は一杯でもうすでに心が折れかけていますが、最後までやり遂げたいと思います。 さて、今回はC言語の宣言の読み方について解説したいと思います。 この記事を読むにあたって、あったら望ましい知識はBNF記法と右端導出の2点だけですが、これらは後々順を追って解説して行くので、まったく知らなくても大丈夫です。 この記事を読めば、よく巷のドキュメントで紹介されているような優先順位なる概念云々を挟むことなしに、右端導出といった統一的で理論的な方法論で、どんな複雑な宣言も、機械的に読み解いていくことができるようになります。 ただし、C言語のdeclaration、とくに、declaratorとdirect-declaratorあたり

    これでわかるC言語の宣言解読法!!(右端導出を用いた方法です) - Qiita
  • C言語で英文字の小文字を大文字に変換してみる - Qiita

    int lower2upper(int ch) { if ('a' <= ch && ch <= 'z') { ch += -'a' + 'A'; } return ch; } けっこう見掛けそうな実装です。 'a'~'z'の文字コードが連続している 対応する小文字と大文字の文字コードが等間隔である 以上の条件を前提としていますが、C言語の規格に合っていないため良い方法とは言えません。 標準ライブラリを使用する #include <stdio.h> #include <ctype.h> int main(void) { static const char s[] = "the quick brown fox jumps over the lazy dog."; for (int i = 0; s[i] != '\0'; i++) { putchar(toupper(s[i])); } }

    C言語で英文字の小文字を大文字に変換してみる - Qiita
  • C言語で0からニューラルネットワークを自作してみた - Qiita

    2023/06/23追記: 頂いたコメントを元にコードを修正しました。主に直した点は下記の通りです。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー 1.静的なメモリを用いることでMNIST全てを用いて学習が行えるようにしました。 (通常のメモリだとオーバーフローしてしまいますが、静的にメモリを取ることで大容量のデータを扱えるようになりました) 2.変数の初期化を明示しました。 3.正解率の求め方を改めました(間違った計算をしていました) その他軽微なミスを修正しました。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー こんにちにゃんです。 水色桜(みずいろさくら)です。 今回はC言語を用いてニューラルネットワークを自作して、MNISTを分類してみようと思います。 今回作成したモデルの精度を以下に示します。 10回の学習で55.0%の精度を達

    C言語で0からニューラルネットワークを自作してみた - Qiita
  • C言語におけるカプセル化の実装パターン - Qiita

    はじめに これは株式会社ビットキー Advent Calendar 2022 2日目の記事です。 記事ではC言語でカプセル化を実現するための実装パターンを紹介します。 想定読者としているのは、C言語のポインタの扱いが分かるくらいの初学者で、かつ何かしらのオブジェクト指向プログラミングがサポートされた言語に習熟している方です。 C言語でのオブジェクト指向プログラミングの実践 今日のソフトウェア開発ではオブジェクト指向分析設計が不可欠ですが、オブジェクト指向プログラミングの実践にあたって言語仕様のサポートは必須ではありません。私の体験ベースでは、C言語が使われるプロジェクトでもオブジェクト指向分析設計が用いられることがほとんどでした。 C言語は言語仕様レベルではオブジェクト指向プログラミングをサポートしていません。言い換えると、C言語にはオブジェクト指向分析設計におけるオブジェクトを画一的に

    C言語におけるカプセル化の実装パターン - Qiita
  • 【C言語】void型- 何も無いことを意味するってどういうこと? - Qiita

    はじめに コードを書いているとよく出てくるvoid型。 意味を調べると「何もない」ことを意味するデータ型と出てくる。 率直に思った感想、「何もないってどういうこと?」です。 まだまだプログラミング初心者な私は型の質が理解できていないのかも。 ということで深掘ってみました。 Voidの 『何もない』 を解説 何もない=型がない int型やfloat型が1~100などの数ある数値だとすると、void型は0である。 0の為、返す必要がないのである。 voidは関数の引数と戻り値のデータ型としてよく使われる。 関数のは4通り考えられる 引数あり、戻り値あり 引数あり、戻り値なし 引数なし、戻り値あり ★引数なし、戻り値なし =何もない voidは4つ目のどちらもない時のデータ型として使われる。 来の関数

    【C言語】void型- 何も無いことを意味するってどういうこと? - Qiita
  • Cコンパイラを作ろう!

    こんにちは、21Bのseasonです。この記事はtraP夏のブログリレー3日目の記事です。 自作Cコンパイラでセルフホスト達成しました。 リポジトリ: https://github.com/season1618/c-compiler/tree/main 自作Cコンパイラでセルフホスト達成しました!!!!!!🎉🎉🎉https://t.co/8fLIAJWksQ pic.twitter.com/2fgH5sKoZ0 — season (@season1618) July 27, 2022 実際にどうやって作るかを書くと長くなるので、ここでは経緯とか完成までの流れとかを書こうと思います。一応開発メモは以下に上げておきました。 開発メモ: https://github.com/season1618/note/blob/main/cs/c-compiler/index.md 経緯 大学の講義で

    Cコンパイラを作ろう!
  • 【連載】Windows 10で始めるC言語開発

    Windows 10でC言語開発をしよう! Windows APIで行く【Microsoft C/C++】(2)

    【連載】Windows 10で始めるC言語開発
  • Windows 10で始めるC言語開発(7) Windows 10でC言語開発をしよう! GitHub.comを使う

    現在のソフトウェア開発において、GitHub.comは外すことができない。ソースコードの共有やバージョン管理にGitHub.comを使い、開発中のコミュニケーションにもGitHub.comを使い、開発者間のリアルタイムコミュニケーションにSlackを使うというのが、最近の一般的な開発スタイルだ。C言語で開発を始めるにあたっても、GitHub.comは避けることはできない。最初の設定は煩雑だが、ここは最初に設定してしまおう。 GitHub.comを使う 開発を行う場合、ソースコードの管理を行うために何らかのバージョン管理システムを使うことが多い。それは社内に導入された製品だったり、オープンソースソフトウェアだったり、クラウドサービスだったりする。最近最も広く使われているのはクラウドサービスのGitHub.comだ。開発に必要になるさまざまな機能が提供されており、もはやソフトウェア開発のエコシ

    Windows 10で始めるC言語開発(7) Windows 10でC言語開発をしよう! GitHub.comを使う
  • Windows 10で始めるC言語開発(5) Windows 10でC言語開発をしよう! Visual Studio Code デバッグ編

    LLDBでデバッグする 前回までのセットアップで、Visual Studio CodeでCのソースコードがビルドできるようになった。さらに便利な状況にセットアップできるのだが、まずは先に基的な機能をすべて整えてしまそう。次はVisual Studio CodeでLLDBを使ったデバッグができるように設定する。 LLDBはLLVMプロジェクトの一環として開発されているデバッガだ。CコンパイラとしてLLVM/Clangを使う際に、デバッガとしてLLDBを使うというのは相性がよい。複数のプラットフォームで動作し、Visual Studio Codeから使えることはもちろん、CUIコマンドで使うこともできる。 Visual Studio CodeでLLDBを使う方法はいくつかあるが、最も簡単なのは「CodeLLDB」と呼ばれるVisual Studio Codeのエクステンションを使う方法だ。L

    Windows 10で始めるC言語開発(5) Windows 10でC言語開発をしよう! Visual Studio Code デバッグ編
  • Windows 10で始めるC言語開発(1) Windows 10でC言語開発をしよう!LLVM/Clangで行く

    TIOBE Programming Community Index (2021年4月4日) 資料: TIOBE Software 増加傾向を続けているのはPythonだ。使われる分野も多岐にわたる。学習が比較的容易で必要とされる産業が多いということは、それだけ就職口があるということも意味している。この言語に人気が出るのは当然だ。 長期にわたって減少傾向にあるものの、Javaにも根強いシェアがある。Javaは既に企業システムの基幹部分で使われているなど、ビジネスにおいて欠かすことができない言語だ。新規開発に加えて、Javaで開発したシステムのメンテナンスや改修といったニーズもある。これも就職先が多いプログラミング言語だ。 そして現在、TIOBE Programming Community Indexの1位はC言語だ。もともとC言語は人気1位だったが、Javaの登場以降は2位に甘んじていた。し

    Windows 10で始めるC言語開発(1) Windows 10でC言語開発をしよう!LLVM/Clangで行く
  • 「この位置に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