【知識】俺のためのプログラム覚え書き【共有】

■ このスレッドは過去ログ倉庫に格納されています
2013/02/03(日) 21:15:45.06
さあやってまいりました。
プログラムのノウハウをメモしていこうよ。
VB.NETだよ全員集合
就職できないよ

つっこみ歓迎!
ナレッジマネジメントしていこう。
2013/02/20(水) 22:47:04.99
Visual Studio は、サーバーエクスプローラーから、コードの生成が可能だが、
Shell 関数を使うと楽な場合も多い。
2013/02/21(木) 00:30:14.56
知恵袋使えばいいのに
2013/02/24(日) 23:04:46.48
qsortよりもstd::sortの方が高速
2013/03/06(水) 16:34:46.45
//JavaScriptでクイックソート
Quicksort = function (xs) {
if (xs.length <= 1) return xs;
var pivot = xs[Math.floor(xs.length/2)];
return [].concat(
Quicksort(xs.filter( function(x){ return pivot>x;})),
xs.filter( function(x){ return pivot==x;}),
Quicksort(xs.filter( function(x){ return pivot<x;})));
};
2013/05/02(木) 18:10:11.66
Visual Studio 使ってる人、
フォームクラスを集めただけのプロジェクトを作って、
他プロジェクトと連携させることってありますか?

フォームクラスには、業務ロジックのコーディングは一切行わず、
全てを他プロジェクトで実装する、という形態。


フォーム上のコントロール類のスコープを全部 Public に変えてやれば簡単だけど、
一つ一つ、プロパティ、イベントを作って公開してます。

ここまで、問題ないかな?
26デフォルトの名無しさん
垢版 |
2013/05/03(金) 06:29:20.72
ネットで調べてもどこにも載っていないため自力で解決した内容

スプリットコンテナ SplitContainer の制御方法。

パネル2の幅の最大制限を実装する。
幅が指定した値を超える時、その分、フォームを縮める。

−−−−−−
  パネル1
−−−−−− ←分割線
  パネル2

−−−−−−

パネル2の幅の最大値は m_splitPanel2MaxSize
にセットしているものとする。

SplitContainer1.SplitterMoved イベントハンドラにて

 前半部分(長いので2分割。)

If Not m_enableSplitterMovedEvent Then
' 当イベントが無効の場合
Exit Sub
End If

' Me.SplitContainer1 を sender を通して取得。
Dim sc As SplitContainer = CType(sender, SplitContainer)
27デフォルトの名無しさん
垢版 |
2013/05/03(金) 06:30:47.82
SplitContainer1.SplitterMoved イベントハンドラ

 中盤部分(長すぎたので3分割に変更)

If sc.Panel2.Height > m_splitPanel2MaxSize Then
' Panel2 の高さが最大値を超えた時

' 当イベントの再帰呼び出しを回避
m_enableSplitterMovedEvent = False

' どのくらい超えたか記憶
Dim dis As Integer = sc.Panel2.Height - m_splitPanel2MaxSize

' パネル2 が最大の高さを超えた分、フォームの高さを縮める。
' これにより、あたかも SplitterDistance をフォームの下の
' サイズ変更グリッドのようにして扱える。
Dim f As Form = sc.ParentForm
f.Height = f.Height - dis

' これによって、コンテナの状態は以下のようになる。
28デフォルトの名無しさん
垢版 |
2013/05/03(金) 06:31:31.17
SplitContainer1.SplitterMoved イベントハンドラ

 後半部分

' これによって、コンテナの状態は以下のようになる。
'  コンテナのサイズ… dis の分だけ縮む。
'    (∵ コンテナは、パネル pnSC 内に Dock Fill で入っていて、
'      pnSC はフォーム直下に配置され、Anchor プロパティに Bottom が含まれている。)
'
'  Panel2 のサイズ…
'    Splitter の移動後なので、Panel2 のサイズは変更済み。
'    上記処理によって、Panel2 の高さが最大を超えている時は、
'    超えた分だけ、フォームサイズ(コンテナサイズ)が縮む。
'    それに伴い、コンテナの分割位置 SplitterDistance は、
'    Panel2 の高さを維持して、Panel1 の高さを縮める。
'    (∵ FixedPanel プロパティ = Panel2 )
'
'    Panel2 の高さは、最大を超えたまま。

' Panel2 の高さを最大にセットする

' ↓このように Panel2 の Height で高さを明示的に指定することはできない。
'Me.SplitContainer1.Panel2.Height = m_SplitPanel2MaxSize
'
'  SplitterDistance を使用する。
'  Panel2 が最大サイズになるように、分割位置 SplitterDistance をセット。
sc.SplitterDistance =
sc.Height - m_splitPanel2MaxSize - sc.SplitterWidth ' 分割線の太さも引く

' 当イベントを有効に戻す
m_enableSplitterMovedEvent = True
End If
2013/05/03(金) 06:49:22.78
ポイントは、以下の3点
・SplitContainer は、フォームに直接配置せず、パネル内に Dock = Fill でセットする。
 そして、そのパネルで、Anchor などを設定する。
・スプリットコンテナ内のパネルは、高さを直接指定できないため、
 SplitterDistance でパネルの高さを調整する。
・フォーム、パネル、スプリットコンテナ、SplitterDistance 、
 スプリットコンテナ内の各コントロール類の位置、サイズを
 メモして、フォームの高さを変えたり、分割線の位置を変えたりしながら、
 お互いのコントロールにどのような影響を及ぼしあうのか
 調べることが基本。
2013/05/04(土) 00:52:12.40
クリオネは普段は可愛いが、食事の時は怖い
2013/05/06(月) 00:29:24.89
うむ
2013/05/19(日) 23:44:05.93
502:01/25(金) 22:27 [sage]
msysでvc++へのパスを通してconfigure時にCXX=clとかするだけで複雑怪奇なcl用のmakefile作ってくれるだね。
今頃気づいたよ。
mingw64使うよりautotoolでvc++使ったほうが互換性気にする必要なくて楽じゃん。
configureマンセー
2013/05/23(木) 23:53:39.58
STLのmapで、Keyによる検索ではなく、並んでいる順のインデックスで値を取ってきたいのですが、
現状では、begin()で先頭イテレータを取得し、取りたいインデックス回だけ++しています。
もっと一発で取れるようなエレガントな書き方はないでしょうか?

std::advance(i,10);
2013/05/31(金) 00:12:31.61
ofs.copyfmt(std::cout);
std::cout.rdbuf(ofs.rdbuf()); とすれば

coutに書き込んだ内容がofsに出力される(リダイレクト)
35デフォルトの名無しさん
垢版 |
2013/05/31(金) 17:41:41.15
C++とC#を混ぜたプログラムの作り方
// hoge49.c 汚いお題のソース
// hoge.cpp
extern "C" int main();
public ref class Hoge { public: static int Submit() { return main(); } };

// foo.cs
class Foo { static void Main() { Hoge.Submit(); }}

cl /c /O1 /MD hoge49.c
cl /clr /LD /O1 hoge.cpp hoge49.obj
mt -manifest hoge.dll.manifest -outputresource:hoge.dll;#2
csc /o foo.cs /r:hoge.dll
2013/05/31(金) 17:51:58.40
vcはmsvcrt.dll(動的リンク)と
Iibcmt.lib(静的リンク)がもともとあって
前者だけOSに取り込まれたから
Cライブラリ=ランタイムライブラリ
というややこしい図式ができた
2013/06/10(月) 22:26:13.55
・Windows Form アプリでドロップダウンリストにチェックボックスを並べる方法

 次の3つのクラスを利用

 1.チェックボックスを継承したクラス
  …2のアイテム要素に、ToolStripControlHost として、3を追加する。
   1.のチェック状態がオンに切り替わった時、2を表示させる。
   1.のチェック状態がオフに切り替わった時、2を閉じる。チェック状態を文字列として取得。

 2.ドロップダウンリスト ToolStripDropDown
  …Framework のコンポーネントをそのまま使う。コーディング不要。

 3.メニューパネル チェックボックスを並べたパネル
  …現在のチェック状態を文字列に変換するメソッド、
   文字列を元にしてチェック状態をセットするメソッド
   を用意。


検索用ワード: スプリットボタン ドロップダウン チェックボックス

一度やってみたかっただけ
2013/06/12(水) 10:14:10.22
InsertAt の意外な力

配列やコレクション内でのインデックスの指定は、
最後の要素のインデックス(要素の数 - 1 )を超えると例外が発生する。

 a = array[5] ' ← array の要素数が 5 の時、例外。

ところが、InsertAt では、最後の要素のインデックス + 1 を指定しても、
例外が発生せずに機能する。

 array.InsertAt( "1" , 5 )

これは、ネットで調べてもよい文献が見つからず、
仕様なのかどうか不明だった。
最後のインデックス+1 を指定した場合は、Add と同じ結果になる、
と解釈したが、使用は自己責任で。

' データグリッドビューで選択中の行の下に新しい行を挿入する

i = DataGridView1.SelectedRows(0) ' 選択中の行のインデックス
DataGridView1.Rows.Insert(i + 1, newRow) ' 最下行を選択していた場合、さらに下の行に追加される。
最下行を選択している場合を分けて、Add を呼ぶ必要がない。
39デフォルトの名無しさん
垢版 |
2013/06/20(木) 01:43:19.78
/* 0初期化しないvectorの作り方 */
何もしないconstructのアロケーターを
vectorの第二テンプレート引数に渡す
2013/06/20(木) 17:30:39.00
>>39は間違い
2013/06/23(日) 15:27:40.63
>>38
PHP の配列は、

配列[] = "aa";

とすれば、配列の最後に追加される。
add と insert の違いは、それほど違わない。

イテレーターの挙動を考えると、わかりやすいか。
2013/07/02(火) NY:AN:NY.AN
//簡単なパスワードクラッカー
#include <stdio.h>
#include <string.h>
bool check(const char *s) { return strcmp(s, "pas") == 0; }
char *func(char ch1, char ch2, int len) {
static char buf[256];
for (int n = 0; n <= len; n++) {
memset(buf, ch1, n); buf[n] = 0;
char *p, *end = &buf[n];
for (;;) {
printf("%s\n", buf);
if (check(buf)) return buf;
p = end - 1;
while (buf <= p && *p == ch2) *p-- = ch1;
if (p < buf) break;
(*p)++; } }
return NULL; }
int main(void) {
char *p = func('a', 'z', 4);
printf("#%s\n", p); return 0; }
2013/07/05(金) NY:AN:NY.AN
.Net で TextBox を透過させる方法

TextBox は、OS による制御が介入するため、簡単に透過できない。

代わりに Label を使ってみよう。
Label はスクロールできない。
そこで、Panel を用意し、Panel の AutoScroll を True にする。
その Panel 内に、Label を追加。
Label の AutoSize を True にしておけば、
文字列内に改行が含まれている場合、自動的に高さも広がる。
2013/07/12(金) NY:AN:NY.AN
イベントファクタークラス、というのかな?
イベントの定義を一つのクラスにまとめることってある?

全てのクラス、フォームに通知したいイベント
(各クラスで処理が必要となるイベント)
を一か所にまとめて、適宜、発生させる、という形。

もし無いなら、忘れないうちにメモ。

・イベントファクタークラス

shared イベントを定義し、
またそれらのイベントの raise メソッドを用意しておく。

イベントファクタークラスの使い方は、
各実装クラスでハンドルを実装するのみ。
全てのクラス、フォームにイベントを通知することができる。

イベントを発生させる際は、アプリケーション内の各所で、
イベントファクタークラスの該当する raise メソッドを呼び出す。
これによって、全てのクラスに通知がいく。
各イベントハンドラでは、自身のクラスインスタンスが存在するかどうかを
判断して、必要に応じて、表示されているフォームだけが処理を
行う、なども可能。

一つのイベントにつき、複数のイベントハンドラが実装されている場合、
イベントハンドラの呼び出し順は、制御が難しいため、
(.NET 系言語などでは仕様が公開されていないため)
各実装クラスのイベントハンドラ内で次に起こしたいイベントを
イベントファクタークラス内で別イベントとして定義する形にする。

イベントドリブン系の言語では、常識?
2013/07/12(金) NY:AN:NY.AN
古いリソースコンパイラでマニフェストを含む
リソースファイルをコンパイルするときは

#define MANIFEST 24

としておく。
46デフォルトの名無しさん
垢版 |
2013/08/26(月) NY:AN:NY.AN
関数型プログラミングにおけるクイックソート・アルゴリズムの実装
www.h6.dion.ne.jp/~machan/misc/qsort-in-fp.html
2013/08/26(月) NY:AN:NY.AN
>>46
宣伝してんじゃねーよ
2013/09/09(月) 00:59:48.47
C++コンパイル高速化と隠ぺい

// my_class.h
class my_class {
// ... all public and protected stuff goes here ...
private:
class impl; unique_ptr<impl> pimpl; // opaque type here
};

// my_class.cpp
class my_class::impl { // defined privately here
 // ... all private data and functions: all of these
 // can now change without recompiling callers ...
};
my_class::my_class(): pimpl( new impl )
{
 // ... set impl values ...
}
49デフォルトの名無しさん
垢版 |
2013/09/28(土) 00:46:08.13
MSDNでこんなURLよくあるよね:

http://msdn.microsoft.com/ja-jp/library/aa384249(v=vs.85).aspx

丸カッコと等号のせいでうまくリンクされないことがあるが、実は丸カッコとその中身は消してもいい。
50デフォルトの名無しさん
垢版 |
2013/11/07(木) 01:06:27.45
gcc/g++を使う初心者に忠告:
コマンドラインに-Wall -pedanticを付けると勉強になる。
2013/11/09(土) 09:44:01.98
VBAでOptionボタンの分岐
Select Case True
 case Option1(0): a=1
 case Option1(1): a=5
 case Option1(2): a=9
End Select
2013/11/09(土) 09:58:41.22
VB Select Caseは多機能
http://homepage1.nifty.com/rucio/main/technique/Select.htm
2013/12/08(日) 01:08:35.54
vb.netなんて負馬に乗りたがるアホの気が知れない
54デフォルトの名無しさん
垢版 |
2014/01/19(日) 11:26:20.91
受験の裏技:
教員用教科書(指導書)は生徒や保護者でも購入できる。
2014/01/19(日) 11:38:54.01
塾に行く暇のない、忙しいセレブのお子さん達は、親に買ってもらった指導書で
勉強して成績上位をキープしたのであった。
2014/01/21(火) 18:47:28.34
赤ちゃんは強く揺さぶってはいけない。
頭の血管が切れて揺さぶられ症候群になってしまうから。
57片山博文MZ無能 ◆T6xkBnTXz7B0
垢版 |
2014/03/01(土) 20:03:01.16
【gccやg++でアプリをプロファイルする方法】
自分のプログラムをプロファイルすることで、時間がかかっている関数などが確認できます。
gccやg++では無料でプロファイルができます。実行速度の最適化に活用しましょう。
1.gccやg++のコマンドラインに-pgを付けてコンパイル&リンクする
2.できたプログラムを実行するとgmon.outというファイルができる。
3.gprof (プログラムファイル名).exe gmon.out > gmon.logを実行するとgmon.logというファイルができる。
4.gmon.logをテキストエディタなどで開いてプロファイル結果を確認する。
58片山博文MZジェバンニ ◆T6xkBnTXz7B0
垢版 |
2014/03/19(水) 11:53:52.69ID:r4sbPf4p
// スマートポインタshared_ptrの使い方:
#if (__cplusplus >= 201103L) // C++11
#include <memory>
using std::shared_ptr;
using std::static_pointer_cast;
using std::make_shared;
#else // Boost
#include <boost/shared_ptr.hpp>
#include <boost/make_shared.hpp>
using boost::shared_ptr;
using boost::static_pointer_cast;
using boost::make_shared;
#endif

後は、g++/clangの場合はコマンドラインに-std=c++11をつける。
古いコンパイラの場合は、Boostをインストールしてインクルードパスに
「C:\local\boost_1_55_0」みたいなパスを追加する。
59デフォルトの名無しさん
垢版 |
2014/04/03(木) 00:13:37.19ID:sk+nDb/g
一般に割り算は掛け算より遅い。可能ならば割り算を掛け算に直したりして割り算の回数を減らす方が速い。
x / 2 → x * 0.5
x / y / z → x / (y * z)
2014/04/03(木) 00:43:09.47ID:sk+nDb/g
http://www002.upp.so-net.ne.jp/ys_oota/effec/
2014/04/03(木) 07:52:11.34ID:g8xJLniI
>>50みたいなのは、まずググってみて破壊的なコマンドじゃない事を確認してから実行する
62片山博文MZジェバンニ ◆T6xkBnTXz7B0
垢版 |
2014/04/05(土) 01:19:22.40ID:kCbCwa1D
多くのコンパイル単位から参照されるinline関数の中にstatic変数があると、
変数の実体がいくつも作成されるので注意する。
2014/04/07(月) 13:24:56.96ID:R2xTxix2
>>62
それは違ってない?
2014/04/07(月) 13:31:19.33ID:R2xTxix2
http://pic.dhe.ibm.com/infocenter/lnxpcomp/v121v141/index.jsp?topic=%2Fcom.ibm.xlcpp121.linux.doc%2Flanguage_ref%2Fcplr243.html
> インライン関数は外部リンケージを持っているものとして処理されるので、インライン関数の
> 本体で定義されるすべての静的ローカル変数またはストリング・リテラルは、変換単位を
> またがって同じオブジェクトとして処理されます。
2014/04/07(月) 14:16:30.42ID:nfj7Xkns
>>64
それはXL C/C++ for Linuxやgcc以外のコンパイラの場合でしょう。
gcc/g++ではそうではないのだよ。
66デフォルトの名無しさん
垢版 |
2014/04/07(月) 21:17:19.08ID:cPHU7Y9F
【リポジトリをローカルにコピーする】
git clone https://...
【ファイルかフォルダを次のコミット対象にする】
git add ファイルかフォルダ
【ファイルかフォルダを削除する】
git rm ファイルかフォルダ
【コミットする】
git commit -m "短いメッセージ"
【ファイルかフォルダを直前のコミット状態に戻す】
git checkout ファイルかフォルダ
【コミット状態をアップロードする】
git push origin master
67デフォルトの名無しさん
垢版 |
2014/04/23(水) 02:20:25.73ID:Be8/NqvO
【ソフトウェア開発7つ道具】
1.IDE/デバッガ
2.リファレンス
3.エディタ
4.Git/SVN
5.Wiki
6.diff/patch
7.仮想マシン
2014/04/23(水) 02:23:51.82ID:Be8/NqvO
5.Wiki/データベース
2014/04/23(水) 02:26:16.11ID:Be8/NqvO
2.リファレンス/マニュアル
70デフォルトの名無しさん
垢版 |
2014/04/28(月) 22:04:58.58ID:nYC6TNjH
企業の事業計画には数学とプログラミングの知識が不可欠である。
71デフォルトの名無しさん
垢版 |
2014/05/01(木) 19:27:41.27ID:O61PxCRM
「インターネット(Amazon)で本を買う方法」
0.自分のメルアドがなければ取得する(Gmailがオススメ)。
1.コンビニで端末を操作してAmazonギフト券を買う。分からないときは店員に訊く。
2.インターネットでAmazonを開き、ほしい本を検索してその本のページを見つける。
3.必要事項を入力して購入手続きを行う。
2014/05/01(木) 22:51:53.92ID:6V5avLId
オペレーションリサーチって数学に含まれるのか?
73デフォルトの名無しさん
垢版 |
2014/05/02(金) 00:47:14.57ID:NtSo2uBW
ORと言えば鳩山由紀夫が
74デフォルトの名無しさん
垢版 |
2014/05/12(月) 23:39:52.21ID:hIlNhllH
【C/C++デバッグ&テストにassert文を使おう】
C言語では<assert.h>を、C++では<cassert>を#includeすればassert文が使えるようになる。

使い方:assert(条件式);

デバッグ版の場合、実行時に評価された条件式がゼロ(or false)ならば、assert失敗になり、
このときプログラム状態が異常と見なされて、位置情報を含むメッセージが出てプログラムが中断する。
この機能により、デバッグ版で実行するだけで多数のテストを一気に済ませることができる。
デバッガを使えば、assertが失敗したときに詳細なデバッギングを開始でき、原因を探ることができる。
75デフォルトの名無しさん
垢版 |
2014/05/18(日) 18:40:20.49ID:wTsBQBni
ブログ=blog≒Web log=Webの記録。

logは元々は丸太という意味で(ログハウスのログ)、航海記録に丸太を使ったのが起源とされる。
2014/06/12(木) 20:44:09.98ID:HVN4f7gN
【誰でもできるサイトの作り方】
1.ドメインかサブドメインを取得(レンタルサーバーも可)。
2.HTMLや画像ファイルなどのデータファイルをFTPソフト(FFFTPなど)でアップロード。
3.Googleなどの検索エンジンに登録。
77デフォルトの名無しさん
垢版 |
2014/09/07(日) 00:00:03.30ID:dQrAI00B
【PC基本操作】
Alt+Tab ウィンドウ切り替え
Ctrl+C コピー
Ctrl+V 貼り付け
Ctrl+X 切り取り
Del 削除
Esc キャンセル
Enter OK
Ctrl+S 上書き保存
Alt+F4 ウィンドウを閉じる
Win スタート
Win+L ロック
Win+D ウィンドウをすべて最小化してデスクトップ表示
78デフォルトの名無しさん
垢版 |
2014/09/28(日) 22:54:48.44ID:uLb79luw
【ネタをニュースに載せて話題にする方法】
1.ニュース記事をホームページに書く(※新規性が大事)。
2.ニュース速報板にスレ立て依頼をする。または、記事をVIP板で話題にする。
3.スレが立ったらあらかじめ用意したシナリオと人海戦術でなるべく場を盛り上げる。
4.そのスレをまとめサイトに掲載したり、はてなブックマークに記録したりする。
2014/09/28(日) 23:09:27.74ID:uLb79luw
間違いがあったら指摘して下さい
2014/10/18(土) 20:42:12.96ID:dP8hne6b
>>79
81片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2014/12/10(水) 00:27:59.54ID:X4ZXIzIa
【余りの計算を高速化する】
十進法において、偶数は下一桁が必ず偶数になる。
奇数は下一桁が必ず奇数になる。これは10 mod 2≡0という合同式の性質から導かれる。
10 mod 3≡1であるから、ある自然数Xを3で割ったときの余りは、
Xの各ケタを足しあわせたものを3で割ったときの余りに等しい。
このように余りの計算は合同式の性質により高速化が可能になることがある。
2014/12/10(水) 00:49:44.99ID:X4ZXIzIa
mod 1, mod 2, mod 3, mod 5, mod 9, mod 10, mod 11のときは明らかに高速化できるね。mod (10の倍数)も自明。
mod 4, mod 8はケタを2で掛ける計算が必要。
mod 6は、4で。mod 7は、3で。
2014/12/10(水) 00:53:36.42ID:X4ZXIzIa
×mod (10の倍数)も自明
2014/12/10(水) 21:19:23.96ID:+onBPWUl
>>82
7 * 11 * 13 = 1001
だから、1000 以下の場合は実際に割らなければならない点を許容できるのなら、mod 13 も早い
85片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2014/12/27(土) 19:47:43.18ID:Cc0RXd7d
【Makefileを書いてみよう】
makeコマンドは、Makefileというファイルに書かれたルールに従って、ファイル作成やビルドを支援する。詳しくは「man make」を参照。
ルールは次のように記述する。

変数1=値1
変数2=値2
...

# ルール1
ターゲットファイル: 作成に必要なファイル
<TAB>作成するためのコマンドライン1
<TAB>作成するためのコマンドライン2
<TAB>...

# ルール2
...

ここに、$(変数1)は「値1」に展開される。また、ある行においてシャープ(#)以降は一行コメントとなる。
ターゲットファイルを更新するかどうかは、必要なファイルの更新日時と比較して決定される。
Makefileは、IDEに頼らずにビルドを行う方法として覚えておきたい。
2015/02/19(木) 20:58:29.89ID:XXveEoOV
【C/C++のコンパイル時間短縮】
結合度の高いモジュールは、仕様を早いうちに決めてなるべく変更しない。
中規模以上では、モジュールの仕様が定まったら、ヘッダーとソースに分け、分割コンパイルする。
ソースファイルが三つ以上なら、プリコンパイル済みヘッダーを使う。
同じような処理は関数やクラスにまとめて再利用する。
モジュール強度の高いモジュールをまとめる。
pImplイディオムを使う。
2015/06/19(金) 23:51:33.10ID:0f7L9Mo9
【差分パッチを作る】
diff -Nru (古) (新) > my.patch
※最後に冗長な/などを付けないこと。

【パッチをあてる】
cd (新)
patch -p1 < my.patch
2015/06/27(土) 20:55:56.62ID:JmAIGVSo
giflibの関数EGifSpewが、成功するとgifオブジェクトは閉じられているが、
失敗すると閉じたか閉じていないか、わからない。
処理が失敗したときもメモリーリークしないように作って欲しい。
2015/07/17(金) 20:25:57.34ID:Ifv8D+/7
【C/C++】
この構文、結構便利だ。gotoを使わずに済む。

do {
if (...) break;
if (...) break;
...
} while (0);
2015/07/21(火) 14:02:22.88ID:/4VVbVfg
【日本人にとって韓国のインターネットは危険】
あなたがK-POPファンであっても、韓国のインターネットを
見るのはやめた方がいい。韓国は、名前の知られた財閥企業の
ホームページにも堂々とウイルスが仕掛けられているほど、
ウイルスが蔓延している。韓国のウェブサイトは無法地帯だから、
日本人が閲覧していると判断すると、攻撃を仕掛けてくるかもしれない。
2015/08/06(木) 16:22:03.56ID:4xD13DN7
【パッケージマネージャaptまとめ】
パッケージ検索:apt-cache search (文字列)
パッケージインストール(権限が必要):apt-get install (パッケージ名)
パッケージの削除:apt-get remove (パッケージ名)
ソース入手:apt-get source (パッケージ名)
2015/10/23(金) 12:27:31.45ID:/zhY2mEN
不正なデータが含まれていない世界では、データ整合性チェックが省けて処理が早くできるはず。
93片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2015/11/02(月) 19:09:42.10ID:N6XDKRqL
【パッケージ管理について】
最近のソフトウェア開発においては、パッケージ管理の標準化と省力化が重要になってきている。
Ubuntuではapt-getが使え、Visual StudioではNuGetが、MSYS2ではpacmanが
パッケージマネージャーとして採用されている。
いちいちライブラリーのソースをダウンロードしてコンパイルするのは、
時代遅れになるかも知れない。
2015/11/02(月) 19:55:39.16ID:N6XDKRqL
他のパッケージ管理システムとしては、RubyにはRubyGemsがあり、D言語にはdubが、
Mac OS XにはMacPortsやHomeBrewが、その他のLinuxにはyumがある。
2015/11/02(月) 20:00:28.60ID:N6XDKRqL
自作のライブラリーのシェアを高めたいと考えているなら、
それをパッケージ化してこうしたパッケージ管理システムに登録するのも良いだろう。
2015/11/03(火) 09:03:30.56ID:qMKmSapR
片山ウザい
2015/11/11(水) 20:12:09.25ID:Fj5jRqmp
複数のstd::mutexを使う場合、lockの後にunlockを呼ばないといけないのは
当たり前だが、lockの順序を間違うとデッドロックになることがある。
2015/11/25(水) 21:55:37.53ID:WGqqylpJ
64ビットUbuntuは開発環境としてはイケてない。パッケージマネージャがダメ。他探せ。
2015/11/28(土) 14:15:01.67ID:7rFxET1r
GCCでデバッグ情報つきでコンパイルする (-gオプション)
$ gcc -g hoge.c -o hoge

コアダンプを出力する設定 (ulimitコマンド)
$ ulimit -c unlimited

GDBでコアダンプの解析
$ gdb hoge core

おもなGDBのコマンド
backtrace : 関数の呼び出し順表示 短縮形は bt
frame n : backtraceで表示された関数のn番目に移動
info locals : ローカル変数の一覧表示
info args : 引数の一覧表示
print var : 変数varの値表示
directory : ソースのディレクトリを指定

http://d.hatena.ne.jp/licheng/
2016/01/17(日) 20:22:46.64ID:uhuIV1e8
価値あるデータの自動生成は、無から価値を産み出す美味しいビジネスになる。
2016/01/17(日) 20:29:38.29ID:uhuIV1e8
>>98は撤回させて下さい。
apt-getでCPUを指定する方法をしらなかった。
2016/02/22(月) 01:57:34.60ID:C/gFN+RL
【プロジェクト作成にCMakeを使おう】
プロジェクトやMakefileを作成するための便利なツール、CMakeを使おう。
CMakeはさまざまな環境で動作するクロスプラットフォームなツールだ。
使い方はまず、プロジェクト設定のためのCMakeList.txtファイルを作成する。
「CMakeList.txt 書き方」で検索してみてくれ。
次にcmake . && makeだ。cmakeはプロジェクトファイルやMakefileを作成する。
cmakeの実行方法がわからないときはcmake-guiを代わりに使おう。
2016/02/22(月) 01:59:35.23ID:C/gFN+RL
>>102
訂正。
× CMakeList.txt
○ CMakeLists.txt
2016/02/22(月) 02:27:22.49ID:C/gFN+RL
【CMakeのここがスゴい!】
☆最小限の記述でOK。いちいちMakefileを書く手間を省ける。
☆ビルドはマルチスレッド対応。
☆ヘッダーの依存関係を自動的に読み取る。
☆WindowsでもLinuxでもMacでも動作。
☆さまざまなバージョンのVisual Studio、Makefileなど、多数の開発環境に対応。
105片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2016/02/26(金) 14:47:20.21ID:5FBVx/js
MSYS2における正しいパッケージの更新方法
http://qiita.com/k-takata/items/373ec7f23d5d7541f982
>MSYS2のpacmanを使ってパッケージを更新する場合、正しい手順を踏まないとパッケージが正常に更新できない場合があります。
2016/03/05(土) 23:54:19.25ID:niBmwPNn
【Gitで不要ファイル削除】
.gitignore で無視するように指定されているファイルを削除するコマンドは
「git clean -X -f」
である。
2016/03/08(火) 21:54:18.53ID:dCW2/Xzy
コマンドプロンプトで「start .」を入力すると、
現在のフォルダが開かれる。
2016/03/10(木) 13:18:06.90ID:2lPGTGW4
>>106の訂正。
無視されるフォルダも削除するなら-dを追加。
2016/03/13(日) 00:01:32.06ID:u6dP9Emt
Linux MintのWebサイトが改ざんされ、ウイルスを配布していたという事件が
あったらしい。何者かがフリーソフトウェア、オープンソースに対する妨害活動を
行っているらしい。どこの企業とは言わないが。
2016/04/01(金) 01:39:52.05ID:cbPhNKwQ
ハンバーガーアイコンは、合同記号「≡」で表示できる。
111片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2016/04/04(月) 20:53:35.14ID:IQfIiZrc
【clang-formatでC/C++ソースを整形しよう】
自分の好みではないコーディングスタイルのソースを
clang-formatというツール(Clangパッケージに含まれている)できれいに整形できる。
ソースをGoogleスタイルにしたい場合は、
$ clang-format -i --style=google *.cpp *.h
でOK。-iを付けると上書きされる。ただし
Googleスタイルの整形は#includeの順番を入れ替えるので注意が必要だ。
整形の前に必ずコピーバックアップしておこう。
2016/04/04(月) 21:02:52.57ID:n+E9DRML
良スレかと思ったが微妙なネタばかりだね
2016/04/25(月) 00:19:45.17ID:9Ydy9Lbh
【C++のライブラリをヘッダーだけにする】
もう.cppファイルの付いたライブラリは要らない?
定義を何もかもヘッダーに移して.cppファイルのコンパイルを減らそう。
やり方。
☆ 短い関数定義→インライン化。
☆ 長い関数定義→テンプレート関数にする。
☆ グローバル変数→インライン関数内のstatic変数への参照で代用。
☆ 定数→static const変数かマクロ定数かenumにする。
2016/05/05(木) 00:33:28.45ID:Oq7RlKiI
【C/C++のスゴいライブラリー】
C/C++の役に立つ、実際に大いに役立っている素晴らしいライブラリーの
リストがここにある。
https://github.com/fffaraz/awesome-cpp
ソフトウェア開発の参考にしてね。
2016/05/05(木) 04:15:50.22ID:4MuIXLBx
>>112
TIPS集めようって発想は良いんだけど
2ちゃんだと闇鍋になっちゃうよな
2016/07/09(土) 06:33:01.30ID:Mz5tnssE
昔は……開発環境にお金を払わないとプログラマになれなかった。
今は……開発環境・マニュアルが無料でダウンロードできて誰でもプログラマになれるようになった。

ホントに恵まれてるね。
117片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2016/07/09(土) 20:51:20.86ID:Mz5tnssE
配列をインデックスで逆向きに処理する?
int a[9];
for (int i = 8; i >= 0; i--) a[i]...

それはstd::rbegin, std::rendでスマートに書き換えられるよ!
auto rend = std::rend(a);
for (auto it = std::rbegin(a); it != rend; ++it) *it...
118デフォルトの名無しさん
垢版 |
2016/07/09(土) 20:58:56.18ID:KCNMgxTc
i==0で i--はエラー
2016/07/09(土) 21:03:40.18ID:Mz5tnssE
Boostはもっとスマートだよ。

#include <boost/range/adaptor/reversed.hpp>
for (auto i : boost::adaptors::reverse(a))
std::cout << i << std::endl;
2016/07/09(土) 21:07:41.44ID:Mz5tnssE
>>118
int型なのでセーフ。このときC++では例外や実行時エラーは発生しない。
2016/07/09(土) 21:30:51.48ID:whD12s8T
#define n (10)
int a[n];
for (size_t i=n; i>0; ) {
--i;
a[i] = ...;
}

逆順ならいつもこうしてるわ負の値などそもそも要らんのだよ
ループの終わりに固定されるforの第3項の存在は忘れたほうがいい
■ このスレッドは過去ログ倉庫に格納されています