C

for 文について

こんな話,Web に無限に記事が転がっててソースコードも無限にある気がするので, ここで僕が書いても完全に無駄な気がするけど,書いてみることにした。 C とかそのシンタックスの影響を受けた言語では共通のシンタックスとして,for 文ってのがある。 どういうシンタックスかというと,こんなこと今更書いても無駄な気がするけど, for (初期化; 継続条件; カウンタを更新) { なんか実行したい処理(); ... } みたいな感じで,ミニマルな例としては, for (int i = 0; i < 5; ++i) puts("Hello, world!"); みたいなものになると思う。 ところでこれ,ループカウンタを使わない場合でも便利な場合があるってのが今回書きたいことで, なんか怪しい入門の本とか記事みたいなのでは触

C言語使っていると「すげえ」ってなるC++の機能

今まで C 言語ばっかり使ってきて、C++ を使ったときに驚いた機能です。 比較的新しい言語仕様もあるっぽいので、処理系によってはサポートしていないかもしれません。 auto auto キーワードを使うと型推論してくれます。 例えば、 #include <iostream> auto plus(auto a, auto b) { return a + b; } int main() { std::cout << plus(1.2, 3.4) << std::endl; return 0; } こういうのが $ ./a.out 4.6 コンパイルも通ってちゃんと動きます。 で、こういう auto を float と宣言すればいいだけ、みたいなやつだけじゃなく、 以下のような変なやつも #include <iostream> #include <complex> auto plus(auto a, auto b) { return a + b; } int main() { std::cout << plus(1.2, 3.4) << std::endl; std::cout << plus(std::complex<int>(1, 3), std::complex<int>(5, 7)) << std::endl; return 0; } $ ./a.out 4.6 (6,10) ちゃんとコンパイルが通って動きます。怖い怖い!! (大袈裟) ラムダ式 C 言語ではある処理単位を引数として渡したい場合、 グローバル

Ubuntu で freeglut を使う

環境は Ubuntu 18.04.3 LTS x86_64 です. 必要なパッケージを入れる $ sudo apt install freeglut3-dev 試す なんか適当に #include <stdlib.h> #include <GL/glut.h> #include <GL/gl.h> #include <GL/glu.h> static void display(void) { glClear(GL_COLOR_BUFFER_BIT); glFlush(); } int main(int argc, char **argv) { glutInit(&argc, argv); glutInitWindowSize(256,256); glutCreateWindow("Hello"); glClearColor(1, 0, 0, 1); glutDisplayFunc(display); glutMainLoop(); return 0; } 256x256 のウィンドウを赤く塗りつぶすだけです. で,コンパイル $ gcc main.c -lglut -lGLU -lGL -lm できました. 適当に Makefile にしておく ライブラリが多くて毎回指定するのは面倒なので, Makefile 必須っぽいです. LDFLAGS = -lglut -lGLU -GL -lm .PHONY: all all: main.o $(CC) main.o $(LDFLAGS) Man よこせ $ sudo apt install opengl-4-man-doc で入るみたいです.でも見た感じ, gl で始まる関数しかないっぽい. まあパッケージ名から想像がつくけど. glut とか glu とかの man の入手の仕方を教えてください. さいごに Windows でやる方がめんどくさいな,という印象ですね.まあ NuGet を使えば一発で入ることは入るんですが. でもあれはプロ