タグ

gccと雑学に関するiwwのブックマーク (3)

  • KMC Staff Blog:gccのビルトイン関数 (printf)

    2009年07月03日 gccのビルトイン関数 (printf) gccのtipsを紹介します。主にgcc3.x からgcc4.x で変わっているところです。 #include <stdio.h> int main() { printf("Hello, world!\n"); } このプログラムはgcc3では普通にprintfを呼び出すコードを生成しますが、gcc4ではどうなるでしょうか。ARM版のexeGCC4でちょっと試してみます。 > gcc -S hello.c 生成されたhello.s を見てみると ... .LC0: .ascii "Hello, world!\000" .text .align 2 .global main .type main, %function main: @ args = 0, pretend = 0, frame = 8 @ frame_needed

  • __null ‐ 通信用語の基礎知識

    わざわざ独自定義する以上は、__nullはポインター長の独自の型として振る舞い、int型への代入でエラーになることが期待されるところである。しかし、そのように動くかどうかは、環境による。 32ビット環境では、現実には(int)0と同じ扱いである。 次のコードはエラーにならない。 int i = __null; そして、typeid(__null).name()で__nullの型を調べると、「int」と出力される。32ビット環境では、__nullはint型なのである。 __nullが存在するのは、64ビット環境への対応のためである。64ビット環境では、NULLと0は同一とは限らない。 #include <iostream> int main() { std::cout << "sizeof(NULL) : " << sizeof(NULL) << std::endl; std::cout <

  • 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; } 実行結果は以下の

  • 1