You cannot write a Cocoa application entirely in C++. Cocoa relies heavily on the late binding capabilities of Objective-C for many of its core technologies such as Key-Value Bindings, delegates (Cocoa style), and the target-action pattern. The late binding requirements make it very difficult to implement the Cocoa API in a compile-time bound, typed language like C++ⁱ. You can, of course, write a
What is Cling Cling is an interactive C++ interpreter, built on the top of LLVM and Clang libraries. Its advantages over the standard interpreters are that it has command line prompt and uses just-in-time (JIT) compiler for compilation. Many of the developers (e.g. Mono in their project called CSharpRepl) of such kind of software applications name them interactive compilers. One of Cling’s main go
序 本書はプログラミングの経験はあるがC++は知らない読者を対象にしたC++を学ぶための本である。本書はすでに学んだことのみを使って次の知識を説明する手法で書かれた。C++コンパイラーをC++で書く場合、C++コンパイラーのソースコードをコンパイルする最初のC++コンパイラーをどうするかというブートストラップ問題がある。本書はいわばC++における知識のブートストラップを目指した本だ。これにより読者は本を先頭から読んでいけば、まだ学んでいない概念が突如として無説明のまま使われて混乱することなく読み進むことができるだろう。 C++知識のブートストラップを意識した入門書の執筆はなかなかに難しかった。ある機能Xを教えたいが、そのためには機能Yを知っていなければならず、機能Yを理解するためには機能Zの理解が必要といった具合に、C++の機能の依存関係の解決をしなければならなかったからだ。著者自身も苦し
C++ Advent Calendar 2015の5日目です。 前C++時代から近代C++に至るまで、ヘッダファイルの重複インクルード排除のために通称インクルードガードというものが使われてきました。 #ifndef YOUR_VERY_VERY_AWESOME_LIBRARY_HEADER_H #define YOUR_VERY_VERY_AWESOME_LlBRARY_HEADER_H #endif // YOUR_VERY_VERY_AWESOME_LIBRARY_HEADER_H しかしこれはファイルの前後に書かないといけないという制約や、他のヘッダとトークン列が一致してしまうと意図せずヘッダがインクルードされないという問題がありました。 これに対してたった1行で書いて終わりの#pragma onceは、標準化を求める声も多く、目的が明確で、実装もあるにも関わらず、標準に入る気配すら
extern "C"の意味について調べてみました。 1.はじめに CプログラムからC++の関数を起動することを確認するため、下記のサンプルを作りました。 foo.h class Foo { private: int number; public: Foo(int num); int print(void); }; void construct(); void foo_print(); void destruct(); foo.cpp #include "foo.h" #include <iostream> Foo::Foo(int num) { number = num; } int Foo::print(void) { std::cout << number << '\n'; } Foo *foo; void construct() { foo = new Foo(100) ; } vo
本エントリ名のような質問にたいする回答をよく忘れてしまうので、ここにメモしておく。 仮引数にvoidを書く/書かないについては、C言語とC++で言語仕様での扱いが異なる。C言語の場合は、関数の宣言か定義かによっても差異がある。 この違いを表にするとこんな感じ。 言語 宣言/定義 f(void) f() C言語 関数宣言 引数なし(ANSI Cのプロトタイプ宣言) 任意の個数の引数(K&Rの頃の伝統的な宣言) C言語 関数定義 引数なし(ANSI Cの関数定義) 引数なし(K&Rの頃の伝統的な関数定義) C++ 関数宣言 引数なし(プロトタイプ宣言) 引数なし(プロトタイプ宣言) C++ 関数定義 引数なし(関数定義) 引数なし(関数定義) C言語のみを使う場合 ANSI Cでコードを書いているならば、引数をとらない関数の仮引数にvoidを書くべきだ。 関数の宣言・定義ともに、仮引数にvoi
using namespace std C++では名前空間の面倒な修飾を省略するためにmain関数の外でusing namespace std;という記述をすることがあります。これによって、std::coutという記述をcoutというstd::を省略した形で簡潔に記述できるようになります。 #include <iostream> using namespace std; // usingディレクティブ int main() { cout << string("便利") << endl; } usingディレクティブ、とりわけusing namespace stdの利用は、サンプルプログラムでの活用や、その場限りの簡単なプログラムを書く分にはそれほど問題にはなりませんが、大規模なコードや継続的な保守・拡張を前提としたコードを書く際には、面倒な問題や複雑な挙動に直面する危険性があるため、できる
時事ネタ いや、「今、fj.comp.lang.cが熱い!」という話は ちょっと前から聞き及んではいたのですが、 流量が尋常じゃないらしいので、 忙しさもあって読むのを控えていたんですけど、 先日、大筋を拾い読みしてみました。 確かに熱いですねえ。 いったん収束するかなあ、と思ったら、なんかまた泥沼の気配が(^^; fjを読んでない人のために説明すると(って、 私も普段はあんまり読んでないんですが)、 「malloc()で確保した領域は、必ずfree()で解放しなきゃいけないか?」という 話題でして、「exit()する時には、OSが解放してくれるんだから 別にfree()しなくてもいいじゃん」という主張と、 「いや、malloc()には常に対になるfree()があるべきだ」という主張があって、 議論を呼んでいたのでした。 んで、私がどう思うかなんですが、 私は面倒臭がりなので、free()
京都C++勉強会の宣伝のために、CとC++の違いを、少しづつ解説することにした。 江添とボレロ村上の京都C++勉強会が、12月16日に行われる。これを書いている時点では、まだ空きがあるので、最新のC++14の新機能と、コンパイル時レイトレーシングを勉強したければ、ATNDで参加申し込みをせよ。 江添とボレロ村上の京都C++勉強会 | 集客ならイベントアテンド 今日は、宣言の違いを解説する。 C++では、staticやexternキーワードは、オブジェクトの宣言にのみ使用できる。型の宣言に指定することはできない。Cでは、型の宣言に指定することもできた。その場合、単に無視される。 // Cでは無視される // C++ではエラー static struct S { int i ; } ; C言語では、合法ではあるが、単に無視されていた文法を、禁止しただけだ。このようなコードはまず書かれていないだ
This is a probably an embarasing question as no doubt the answer is blindingly obvious. I've used Visual Studio for years, but this is the first time I've done any 'Console Application' development. When I run my application the console window pops up, the program output appears and then the window closes as the application exits. Is there a way to either keep it open until I have checked the outp
こんにちは。田原です。 前回までに説明したプログラム用メモリ、静的変数用メモリ、スタック用メモリは、基本的にコンパイル時にサイズが決まります。もし、これらの領域しか使わない場合、巨大なメモリを搭載しているコンピュータでプログラムを走らせても、その巨大なメモリを有効活用できません。それは悲しいですよね。 その巨大なメモリをうまく使うための仕組みが「ヒープ用メモリ」です。今回は、このヒープとその使い方について解説します。 第4回目 コンピュータの仕組みについてで、メモリとそのアドレス、そしてポインタについて少し説明しました。これらはたいへん重要ですので、軽く復習します。 int a; int* b=&a; 上記のようにint型の変数aがあったとします。その変数aはどこかのメモリ上に割り当てられますので、アドレスが割り振られています。その先頭アドレスを取り出す演算子が & でした。つまり、 &a
ならint *型へのポインタになります。 これ、int *****pといくらでも付けられるわけですが、いったいいくつまでつけられるんでしょうか。これってトリビアになりませんかね。 実際に調べてみた。 スクリプト こんな適当なスクリプトを書く。 n = 100 if ARGV.size > 0 n = ARGV[0].to_i end puts "#include <cstdio>" puts "int main(void){" puts "int #{"*"*n}a;" n.times do |i| puts "#{"*"*i}a = new (int#{"*"*(n-i-1)});" end puts <<EOS printf("%x\\n",a); } EOS
Visual Studio のウォッチ式で使える便利な書式を紹介したいと思います。 (※ Visual Studio 2013 を対象としています。古いバージョンでは使えないものもあります。) 説明用サンプルコード class B { int a, b, c; virtual void f() {} }; class D : public B { int x, y, z; }; int main() { D d; B* b = &d; ::std::vector<int> v{ 0, 1, 2 }; int a[1024]; for( int i=0; i < _countof(a); ++i ) a[i] = i; void* p = a; unsigned char* p8 = reinterpret_cast<unsigned char*>(a); char str[] = "Hel
ここでは、変数には、整数型int,文字型char,浮動小数点型doubleなどの型があることに注意してポインタを見て行こう。 これらの変数の型は、その変数の値が必要とするメモリのサイズの情報を持っている。一般的なUNIXでは、int = 4byte, char=1byte, double=8byte が普通であり、変数の型に合わせてその変数がメモリ上で占めるべきサイズが確保されている。サイズを知るためには printf("size of int=%d\n", sizeof(int)); printf("size of char=%d\n", sizeof(char)); printf("size of double=%d\n", sizeof(double)); printf("size of pointer to char=%d\n", sizeof(char *)); printf("
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く