タグ

!tumblr-techとCに関するtyruのブックマーク (77)

  • 代入できない構造体 | 株式会社きじねこ

    備忘録として書きとめておきます。 C++であれば、構造体をはじめとしたクラスを代入できないようにするのは簡単です。しかし、Cでも代入できない構造体を作りたくなることがときどきあります。特定の関数またはマクロを使ってコピーしないといけないようなものがそうで、そうした構造体を代入演算子を使って代入すると破綻してしまいます。そこで代入演算子で代入しようとするとコンパイルエラーにできる方法がほしいわけです。 次のように、幅0のビットフィールドをconst修飾子付きで持たせてあげると代入できなくなります。

    tyru
    tyru 2011/01/14
    どのくらいの移植性があるんだろう
  • 今年の年賀状ネタ - 桜花な日々

    去年(http://d.hatena.ne.jp/rofi/20100417/1271519352)に引き続き今年もやりました。 長いので詳細は続きから。 今年のネタ みなさん今年の干支は何でしょうか? そうですね、みなさん大好きうさみみ年兎年ですね! ということで今年のネタはこれです! #include <stdio.h>/* q=" =;;; $a= 'us' .'a' .'c' .'c' ;; $a=~ s/c/mi/g ;print $a; exit(); q&*/ #/**/ define p(c) putc(c ,stdout ) void pr( char *s, int/* */ e) {char *t =s ;for (; *s ;++s){ /* */ switch( *s ){ case 96: if (e) p(*s);else pr (t ,1);break; /

    今年の年賀状ネタ - 桜花な日々
  • close()

    プププランドのプリンス RiSK @sscrisk 何が問題なのかよく分からない。何をいいたいんだろう? "Story of Your Life » Blog Archive » fstreamのデストラクタを追ってみた話" http://shnya.jp/blog/?p=271 プププランドのプリンス RiSK @sscrisk "仕事でも使えるようなというレベルのことを考えると、間違いなくクローズする関数の戻り値をチェックすべきです。" というこの主張がどうなんだろう?

    close()
  • C言語の誤解されていそうなことについて

    C言語には、字面から常識的に類推したことと実際のキマリが合わない場合がままあり、 慣れない入門者や他の言語の利用者からすると誤解しそうなことが結構ある。 そういったこと(の一部)を以下に列挙。 [追記2012] これ書いたときはまだC99は決まってなかったこともあり、 基的に C89 の話です。C99以降にかわってしまってる件もあり。 文法関係 main の戻り値の型は void でなく int。(*) (※ c++やc99以降は事情が多少変わった) 関数定義で戻り値の型名を省略すると void でなくint。(*) Cでは引数省略の関数定義fnc()はfnc(void)でなくfnc(...)。(*) char,shortの値は演算や関数引数でまずintに変換される 整数の基はint, 実数の基は(どちらかといえば)floatでなくdouble.(*) char, signed ch

    tyru
    tyru 2011/01/07
    「Cでは引数省略の関数定義fnc()はfnc(void)でなくfnc(...)」可変長引数になるのは知らなかった。まぁちゃんとvoid書くけど...
  • Predefined macros

    The Microsoft C/C++ compiler (MSVC) predefines certain preprocessor macros depending on the language (C or C++), the compilation target, and the chosen compiler options. MSVC supports the predefined preprocessor macros required by the ANSI/ISO C99, C11, and C17 standards, and the ISO C++14, C++17, and C++20 standards. The implementation also supports several more Microsoft-specific preprocessor ma

    Predefined macros
  • Re: C言語の変数を初期化で相互/循環参照させる。static は無理? - とくにあぶなくないRiSKのブログ

  • strlcpy - Wikipedia

    strlcpy はC言語で文字列を安全にコピーするための関数である。ISO/IEC で規定された標準Cライブラリの関数ではないが、BSD libc などに含まれている。危険な使い方をしてしまいがちな関数strcpyやstrncpyの代替として、Todd C. MillerおよびTheo de Raadt (テオ・デ・ラート) が開発した[1]。 概要[編集] 関数プロトタイプ(宣言)は以下である。 ポインタsrcの指すアドレスから最大でsize - 1バイトの文字列をdstにコピーし、dstの指す文字列が必ずNUL文字[注釈 1]で終わるようにする。つまり、dstのバッファの実際の大きさをsizeに指定すれば[注釈 2]、バッファオーバーランしないことが保証される。 strncpyは似たプロトタイプchar *strncpy(char *dest, const char *src, siz

  • 境界調整(アラインメント)を調べる::実装技術

    2005-08-14 組み込み開発では、しばしば型の境界調整への配慮が必要になってきます。ところが、境界調整の要求サイズは完全に処理系に依存しますし、境界調整を調べるための専用かつ標準的な機能もないのが現状です。 確かに境界調整を調べるための専用の機能はありませんが、既存かつ標準の機能の組み合わせで調べるための方法はあります。残念ながら、この方法はCとC++では異なるものになってしまいます。この辺りはCとC++の微妙な非互換性に起因しているのです。 まずはCの場合についてです。これは<stddef.h>で定義されているマクロoffsetofを使うことで実現できます。 #define alignof(type) offsetof(struct { char a; type b; }, b) char型と調べようとする型のフィールドからなる構造体を使って、調べようとする型のオフセットを調べれば

  • strict aliasing rule - Radium Software Development

    Giới thiệu website Bóng đá Socolive TV - Trang web xem bóng đá trực tiếp 24/7 HD không có quảng cáo, chất lượng tốt nhất trên thị trường. Với hàng ngàn giải đấu bóng đá trong nước và quốc tế, Socolive TV cung cấp dịch vụ xem trực tiếp 24/7 với chất lượng HD siêu mượt. Với hàng trăm bình luận viên và phòng chat sôi động, người hâm mộ bóng đá sẽ có những trải nghiệm thú vị nhất. Giới thiệu những nét

  • malloc() が返すアドレスの下位数ビットは常に0って知ってます?

    当は「malloc() が返すアドレスは8の倍数って知ってます?」 にしたかったんだけど,「8」というのは CPU 依存の数字だし, 一般には2の冪乗なのでこういうタイトルにした. そもそもこの記事を書くきっかけは, YLUG の 「第67回カーネル読書会 (glibc malloc について)」の ビデオと資料を見たこと. 1985年頃に Lisp の処理系を作ろうとして (結局作らなかったけど(^^;)) メモリ管理方法について色々考えたアイディアと同じものもいくつか出てきて, 懐かしくもあり,またとても面白かったが, 私にとって目新しいアイディアは少なかった. malloc() の内部実装に興味を持つ人であっても, 意外と上記タイトルに書いた事実を知らない人が多いようなので, 「ビデオと資料」のページに色々とコメントした. この記事はそれを整理してまとめたものである. 2016/0

  • プログラミング言語 C の新機能

    7. 文法一般 この章では C 言語に新たに加えられた指示付きの初期化子や複合リテラルといった文法や、暗黙時の宣言に関する変更といった、変更された文法について説明します。 7.1 暗黙の関数宣言 現在の C 言語の規格では、ある関数から他の関数を呼び出す時、とくにその関数のプロトタイプを宣言しなくても使用することができました。例えば stdio.h を読み込まずに、printf を使用するといったことです。しかし、今度の C 言語ではそのような場合、その関数の呼び出しは規格上未定義の動作となります。ただ実際には多くの処理系では警告を出してコンパイルするよう実装されることでしょう。この辺の機能は C++ に近くなっていますね。 7.2 宣言時の暗黙の型 手続き型言語では、一般的に変数や関数などを宣言して使用する必要があります。もちろん C 言語も例外ではありません。しかし C 言語では特に型

    tyru
    tyru 2010/12/23
    restrictポインタ
  • KariyaSiesta | C 言語向けのコーディングチェッカ

    CX-Checker の特徴 CX-Checker は以下の特徴を持つ C 言語向けのコーディングチェッカです。 Eclipse プラグインとして動作するコーディングチェッカ XPath による迅速なルール記述 Java によるパワフルなルール記述 XPath によるルール記述を補助するインタフェース

  • Python で インラインC/C++ « Stop Making Sense

    はじめに 以前から SWIG を使った Python・C/C++の連携に興味がありましたが、Instant というモジュールを使えばもっとお手軽に出来ることを知り、ちょっと試してみました。 Instantとは Python から C/C++のコードを呼び出すためのモジュールです。 (Webサイト) http://heim.ifi.uio.no/~kent-and/software/Instant/doc/Instant.html Python と 他の言語を連携させるツール類は Instant 以外にも色々ありますが、Instant には次のような特徴があります。 Python のコード中に、インラインでC/C++をインラインで記述出来る。 WebサイトのTOPには、次のようなサンプルが載ってます。 from instant import inline add_func = inline(

  • ディレクトリを fopen の "r" で開く - higepon blog

    「ディレクトリを fopen の "r" で開く」事が成功する前提のコードを見かけた。 Unix 系だとたまたま動くという理解で良いんだよね? コード if ((ffp = fopen(fn, "r")) == NULL) { if (errno == ENOENT) return (FIOFNF); return (FIOERR); } /* If 'fn' is a directory open it with dired. */ if (fisdir(fn) == TRUE) return (FIODIR);

    ディレクトリを fopen の "r" で開く - higepon blog
  • 2010-11-16

    遅くなりましたが。立ち上がりました。 Chiba.rbのグループを立ち上げました。 - koeだめ - http://bash0C7.hatenablog.com/ に移行しました 集まれる場所を探しています。もしも情報お持ちの方がいらっしゃったらご連絡お願い致します。 #include <stdio.h> void putStrLn(const char* s) { printf("[%s]\n", s ? : "null pointer"); /* 条件演算子 ( ? : ) の第2オペランドを省略 */ } int main(int argc, char* argv[]) { putStrLn("hoge"); putStrLn(""); putStrLn(NULL); return 0; } 実行結果。 [hoge] [] [null pointer] 条件演算子(三項演算子とも)

    2010-11-16
  • GitHub - rui314/8cc: A Small C Compiler

    8cc C Compiler Note: 8cc is no longer an active project. The successor is chibicc. 8cc is a compiler for the C programming language. It's intended to support all C11 language features while keeping the code as small and simple as possible. The compiler is able to compile itself. You can see its code both as an implementation of the C language and as an example of what this compiler is able to comp

    GitHub - rui314/8cc: A Small C Compiler
  • S式のC言語 - einblickerの日記

    Common Lisp | 15:47 | 以前この記事を読んで、S式でC言語を書くというアイデアは面白そうだなと思っていた。どうやらgauche.cgenというモジュールを使うとciseが使えるらしいのだが、使い方がよく解らないので使うのは諦めていた。他に何か無いかと探していると、タイトルに「S式ベースC言語」という言葉が含まれている論文がCiNiiにあって(これとこれ)この論文を書かれた方のHPに行ってみると、実際に使えるSC言語の実装が公開されていた。こちらにはちゃんとドキュメントもある。このSCを使うと、CL風のマクロがC言語で使える。試しに使ってみた例。 (decl (printf) (fn int (ptr (const char)) va-arg)) (%defmacro from-to (var from to &body form) `(for ((def ,var in

  • [開発][C言語]超テキトー図解ポインタ - chocolate holic

    まだ途中。書き次第随時追記していきまする。間違いとか分かりにくい表現があったら遠慮無く指摘してくだしあ。

  • UNIXv6のソースコードな話 - syuu1228's blog

    Lions' Commentary on UNIX 読書会で気になった所があるのでメモ。 型の種類と幅 PDP-11は16bitなコンピュータなのでレジスタ=アドレスは16bit=2byte。 これを前提に型の幅を考えると、 char 1byte int 2byte char* 2byte となるようだ。 short、void、void *、unsignedあたりは見当たらない…。 宣言 関数宣言はしないようだ。 関数コールは型チェック無しに書かれたとおりコンパイルされるのだろう。 返り値の型宣言が無いんだけど…? int coremap[CMAPSIZ], int swapmap[SMAPSIZ]がsystm.hに書かれているだけで.cに書かれていないのは今のCな感覚だととてもおかしいけど、宣言でなくて実体だという事か? systm.hをincludeしている.cは当に一つしかないのか

    UNIXv6のソースコードな話 - syuu1228's blog
  • strcpy_sなんて使うな - Note

    超今さらですが、C1x?に、セキュア文字列関数群*1が正式に入るみたいですね。 http://www.open-std.org/JTC1/SC22/WG14/www/projects#24731-1 で、google:strcpy_sで検索すると、strcpyなんて使うな。安全でセキュリティの高いstrcpy_sを使え!という旨の文面がいっぱいでてくるわけですよ。馬鹿だと思いますね。この「セキュア」文字列関数群を最初に考えた人も、乗せられて使え使え言ってる人達も……。勿論strncpy*2やstrlcpyも含めて。 確かにバッファオーバーフローは阻止できますよ。スタックが上書きされて暴走したり悪意のあるコードが実行されたりするのは阻止できますよ。でも、その結果、データが欠けたまま処理が進んでしまうわけですよ。規格ではset_constraint_handler_sでオーバーフロー時のハンド

    strcpy_sなんて使うな - Note