タグ

雑学とライブラリに関するiwwのブックマーク (2)

  • main() の前に関数を呼ぶ - bkブログ

    main() の前に関数を呼ぶ C/C++ のプログラムで、main() の前に関数を暗黙的に呼びたいときがあります。ここでは GCC の拡張を使った方法と、C++ のコンストラクタを使った方法を紹介したいと思います。 GCC では main() の前に呼ばれる関数を __attribute__((constructor)) という拡張機能を使って定義できます。たとえば、次のプログラムでは main() の前に foo() が呼び出されます。 #include <stdio.h> __attribute__((constructor)) void foo() { printf("hello, before main\n"); } int main (int argc, char **argv) { printf("hello, world\n"); return 0; } 実行結果は以下の

  • snprintf - こんな関数あるんだ。 (凍結)

    こんな関数あるんだ。 と思ったのでメモ。 snprintf(3)という関数が用意されたシステムでは、下記の様なコーディングでバッファオーバーフローを防げるそうだ。 #include <stdio.h> int main(int argc, char **argv) { int n = 123456; char str[4] = "000"; printf("%s\n", str); snprintf(str, sizeof(str), "%d", n); printf("%s\n", str); return(0); } 000 123 でもこれ、ANSI C はもちろん C99 でも規格化されていないので、仕事で使用するプログラムには皮をかぶせるかなんかしないと使えないみたい。処理系によって戻り値や処理内容まで違うとは恐るべし。…もっとも Visual C の、互換性:Win95,Win

  • 1