タグ

Cに関するsawasawakyoto2のブックマーク (19)

  • 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の仕様
  • fopen, fwrite, fclose のエラー処理 - inuzのブログ

    好き嫌いの問題っていうよりは信頼性の問題で open, write, close のほうが普通?って思ったりするけれど、それはおいといて。 以下のソースコードは、引数に与えられたパスに1バイト分"a"を書き出して終了するプログラム。 #include <stdio.h> #include <errno.h> int main(int argc, char *argv[]) { FILE *fp; char s[1] = {"a"}; size_t fwb; int ret; if ((fp = fopen(argv[1], "a+")) == NULL ) { printf("Failed to open: %s\n", strerror(errno)); exit(1); } fwb = fwrite(s, sizeof(char), 1, fp); if (fwb < 1) { pri

    fopen, fwrite, fclose のエラー処理 - inuzのブログ
  • [C言語] 可変引数マクロの作り方 - Qiita

    #include <stdio.h> // 引数の数が違う、同じ関数に置き換える #define DEBUG_PRINT(...) printf(__VA_ARGS__) #define DEBUG_PRINT2(fmt, ...) printf(fmt, __VA_ARGS__) // 引数の数が違う、別の関数に置き換える #define GET_MACRO(_1,_2,_3,NAME,...) NAME #define SUM(...) GET_MACRO(__VA_ARGS__, sum3, sum2)(__VA_ARGS__) int sum2(int a,int b) { return a+b; } int sum3(int a,int b,int c) { return a+b+c; } int main(void) { DEBUG_PRINT("num=%d\n",2); D

    [C言語] 可変引数マクロの作り方 - Qiita
  • 排他的論理和

    ここでは、真を1で、偽を0で表すことにする。 排他的論理和 xor (exclusive or)とは、 1 xor 1 = 0 1 xor 0 = 1 0 xor 1 = 1 0 xor 0 = 0 と定められるものである。 すなわち a, b のどちらか一方だけが 1 であるときにだけ a xor b = 1  となる。 排他的論理和には、次のような、いくつかの面白い性質がある。 a, b, ..., c は0か1かのどちらかとする。 (1)    a xor b xor ... xor c のように複数個のものの xor をとった場合、a, b, ..., c の中で 1 であるものの個数が奇数個ならば結果は 1、偶数個ならば結果は0となる。 (2)    a xor a = 0 (3)    a xor b = 0 ならば a = b ビットごとの排他的論理和 演算子 ^ はビットご

  • Linux日和~スレッドの同期1~

    キーボードやパケットの入力を受け付けるスレッドがあり、入力されたデータを受け取って必要な処理を行うスレッドがあったとします。処理を行うスレッドはデータが入力されたかを定期的に(10msに一回のように)チェックしていたのでは無駄が多そうです。そこで、普段は実行を停止していて、「データが到着したから処理してね」という通知を受けると処理を再開できるようにします。 /* * sample program * synchronous of threads test program */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <errno.h> #include <pthread.h> #define BUFSIZE 256 char buf[BUFSIZE]; p

  • gcc のデバッグ術

    Unix系コマンドラインユーザーのための、 gcc/g++/g77 による開発におけるデバッグ術を簡単に紹介します。 以下の内容は gcc 2.7.2.3 での動作は確認しています。 g++/g77 でも恐らくは通用すると思うのですが、 ひょっとすると異なる部分があるかもしれません。 筆者は g++/g77 の使用経験がないので、その場合は御容赦を願います。 実行前 キーワード「コンパイルオプション, -Wall, -O2, -O4」 まずは gcc にオプション opt'-Wall' を付けてコンパイルし、 警告がなくなるまでソースを修正します。 これは 常識 です。 次に opt'-O4 -Wall' でコンパイルします。 「未初期化変数の使用」の警告 (`foo' might be used uninitialized in this function) は、 opt'-O4' を付

  • Makefile の書き方 (C 言語) — WTOPIA v1.0 documentation

    makeってなに?¶ ソースファイルを分割して大規模なプログラムを作成していると, コマンドでコンパイルするのが面倒である. また, 一部のソースファイルを書き換えだけなのに全部をコンパイルし直すのは時間の無駄である. そんな問題を解決するのが make である. Makefile と呼ばれるテキストファイルに必要なファイルと各ファイルのコンパイルのコマンド, ファイル間の依存関係を記す. そして, “make” というコマンドを実行するだけで, 自動的にコマンドを実行してコンパイルしてくれる. これだけではスクリプトと大差がないのだが, make は Makefile に記された依存関係に基づいて更新されたファイルの内関連のあるものだけを更新することで, コンパイル時間を短くする. make は特定のプログラミング言語に依存したものではない. C 言語のソースファイルのコンパイルにも使え

  • Android NDKで使えないシステムコール・ライブラリ関数一覧 : DSAS開発者の部屋

    Android NDKでCのコードを書いていると、普段のCプログラミングでは悩まないことで悩むことがあります。たとえば、AndroidのlibcはGoogle製でPOSIXに準拠していません。他のUnix系環境であれば必ず実装されているライブラリ関数が存在しないなどの罠があるため、メジャーなツールをビルドするのにもconfigure;makeが素直に通らなかったりします。 それだけでなく、Android NDKが提供する開発環境にも問題があります。特に、NDKで配られているヘッダファイルとビルド用の共有ライブラリで対応が取れていないのは頭痛のタネです。どういうことかというと、ヘッダファイルに定義されているシステムコールを使おうと思ったらリンカエラーが出ることがあります。 また、システムコールの一部については、カーネルレベルでは正しく実装されているもののlibcにインターフェース実装がなく、

    Android NDKで使えないシステムコール・ライブラリ関数一覧 : DSAS開発者の部屋
    sawasawakyoto2
    sawasawakyoto2 2016/08/03
    メモ『AndroidのlibcはGoogle製でPOSIXに準拠していません。』
  • pthread_createしたらjoinを忘れない

    pthread_createしたらjoinを忘れない 概要 pthread_createで作ったスレッドはdetachしない限りはjoinしないとスタックなどのリソースが 解放されない。従ってjoinするのを忘れるとメモリリークを起こす。 pthread_createでスレッドを作ったらdetachするか必ずjoinすること ソースと実行結果 はじめにjoinを使用した場合の仮想メモリの状態をみる。この場合のソースは次の通り pthread.c コンパイルの方法は gcc -o pthread -pthread pthread.c #include <stdio.h> #include <sys/types.h> #include <stdlib.h> #include <pthread.h> void* thread_main( void* args ) { fprintf( stder

  • 普通のやつらの下を行け: C でバックトレース表示 - bkブログ

    普通のやつらの下を行け: C でバックトレース表示 普通のやつらの下を行けの第2回として、今回は glibc の関数を使って C でバックトレース (スタックトレース) の表示を行ってみます。 バックトレースとは バックトレースとは、大ざっぱに言うと、現在の関数に至るまでの道筋です。たとえば、次の Ruby プログラムを実行すると、 1 / 0 の行で例外が発生して、バックトレースの表示とともにプログラムは異常終了します。 def foo 1 / 0 end def main foo end main この例では main から foo を呼び foo の中の 1 / 0 の部分で例外が発生しています。 % ruby divide-by-zero.rb divide-by-zero.rb:2:in `/': divided by 0 (ZeroDivisionError) from div

  • How do I turn off a static code analysis warning on a line by line warning in CDT (C code)?

  • strtoul

    文字列をunsigned long値に変換(エラー検出、基数指定あり) 【書式】 #include <stdlib.h> unsigned long strtoul(const char *s, char **endptr, int base); 【説明】 文字列 s を、baseで指定された基数でunsigned long型に変換し返却します。このとき、文字列中に変換不可能 な文字があった場合には、その文字列のポインタをendptrに格納します。 atol関数は、単に文字列を10進のlong型変数に変換するのみで、文字列中に変換不可能な文字があった ときには対応できませんが、strtoulを使うと、変換可能な部分についてはきちんと変換し、変換不可能な 部分についても情報を得ることができます。更に、baseを指定することにより、好きな基数で変換す ることができます。 結果がunsigned

    sawasawakyoto2
    sawasawakyoto2 2015/04/27
    文字列をunsigned long値に変換(エラー検出、基数指定あり)
  • printfで文字列の最大文字数を指定する - 揮発性のメモ2

    "%.10s"のように、 . をつけて出力する文字列の最大バイト数を指定する abcdeという5文字を出力する 書式 出力 "%10s" _____abcde 右詰、左側に空白 "%3s" abcde はみでる "%-10s" abcde_____ 左詰、右側に空白 "%.10s" abcde そのまま "%.3s" abc うしろが切り詰められる "%10.10s" _____abcde 長いときは切り詰められ、短いときは空白で補完される readの受信内容をとりあえず出力したいときとかに使えるかも len = read( fd, buf, sizeof(buf) ); if(len>0){ printf("%.*s\n",len,buf); }参考:C言語研修(14/60)文字精度 ( ソフトウェア ) - 何気ないえすぃ〜日記 - Yahoo!ブログ

    printfで文字列の最大文字数を指定する - 揮発性のメモ2
  • GCC で精度の高い時間間隔を取得する

    CentOS 6 で clock() が常に 0 になって困ったのでメモ #include <time.h> int clock_gettime(clockid_t clk_id, struct timespec *tp); を使用する。 timespec の構造体は以下の通り定義されている。 struct timespec { time_t tv_sec; /* seconds */ long tv_nsec; /* nanoseconds */ }; 計測したい処理を、usleep のところと差し替える。 mytimespan.c #include <stdio.h> #include <time.h> #include <unistd.h> int main(){ struct timespec res,tp1,tp2; long sec,nsec; // 時刻精度の確認 if(cl

  • Man page of CLOCK_GETRES

    Section: Linux Programmer's Manual (2) Updated: 2013-12-28 Index JM Home Page roff page 名前 clock_getres, clock_gettime, clock_settime - クロックと時間の関数 書式 #include <time.h> int clock_getres(clockid_t clk_id, struct timespec *res); int clock_gettime(clockid_t clk_id, struct timespec *tp); int clock_settime(clockid_t clk_id, const struct timespec *tp); -lrt とリンクする (バージョン 2.17 より前の glibc のみ) glibc 向けの機能検査

  • スレッドIDを取得する - 揮発性のメモ2

    スレッドの数を数える方法 - 揮発性のメモ LWP番号を見たい。 $ ps -Lm 26443 PID LWP TTY STAT TIME COMMAND 26443 - pts/5 - 0:00 ./a.out - 26443 - Sl+ 0:00 - - 26444 - Sl+ 0:00 - - 26445 - Sl+ 0:00 - - 26446 - Sl+ 0:00 -このLWP番号をプログラムで取得したい。 gettid()という関数があるらしい。 #include pid_t gettid(void); Man page of GETTID と思ったら 無いらしい。 注意 glibc はこのシステムコールに対するラッパー関数を提供していない。 syscall(2) を使って呼び出すこと。 Man page of GETTID Man page of SYSCALL というわけで

    スレッドIDを取得する - 揮発性のメモ2
  • akita-nct.jp - このウェブサイトは販売用です! - 高専 秋田 ロボコン 機械 電気情報 リソースおよび情報

    This webpage was generated by the domain owner using Sedo Domain Parking. Disclaimer: Sedo maintains no relationship with third party advertisers. Reference to any specific service or trade mark is not controlled by Sedo nor does it constitute or imply its association, endorsement or recommendation.

  • 標準ライブラリ関数

    第7章 標準ライブラリ関数 コンパイラメーカがよく使う機能をオブジェクトライブラリとして提供してくれるものを「標準ライブラリ関数」と言います。 入出力、文字列処理、文字処理、数学処理など機能別に多くのライブラリ関数が存在します。 以下にごく基的でよく使われるライブラリ関数についてまとめます。 尚、入出力関数については、第5章と第8章をご参照下さい。 また、この章で扱わない標準ライブラリ関数については、付録の「標準ライブラリ一覧」で順次扱っていくことにします。 7-1.文字列処理関数 文字列を処理するための関数 文字列のコピー、連結、比較、長さの取得などを行います。 #include <string.h> が必要です。「#include」については「18-2」 を参照してください。 また、詳細に付いては「標準ライブラリ一覧」をご覧ください。 【文字列処理関数】 関数説明使用例 strcpy

    sawasawakyoto2
    sawasawakyoto2 2015/03/30
    算術関数
  • 総合目次 - 苦しんで覚えるC言語

    苦Cの内容の転載などは自由ですが、苦Cからの引用であることを明記してください。 (どこかに「苦Cより」と書かれていればOKです。) 学校や会社などで生徒(新入社員)へのテキストとして使用することも自由です。 その際、内容を修正したり、印刷して配布するのも自由です。

    総合目次 - 苦しんで覚えるC言語
  • 1