1. <HEADER.h> в современном С++ включает старый (90-какого то года) стандарт с++, соответственно <header> - новый стандарт, с пространствами имен.
это не обязательно, а рекомендательно.
в хэдерах присутствуют и <header.h> (старый стиль) и <header> ... естественно, с новым должны использоваться namespace, а со старым нет, и не смешивать одно с другим.
2. Для gcc глубоко фиолетово какое расширение имеют файлы с++ - .cxx, cpp, cc, C Также это глубоко фиолетово с точки зрения ОС.
никак не фиолетово, и определяется дефаултными настройками, который установят для gcc дистрибьюторы, в разных ОС (Linux, Solaris, QNX) эти дефаултные настройки меняются, и даже между дистрибутивами Linux и версиями gcc, поэтому с .cpp лучше не экспериментировать;
но ещё хуже другое: вторым экспериментом автор начнёт вместо gcc использовать make, и что там будет с суффиксами и дефаултными правилами (Implicit Rules) трудно предсказать в зависимости от версий, посмотрите сюда:
$ make -p
Пользователь решил продолжить мысль 22 Февраля 2012, 19:47:16:
Нет, тут все правильно. Надо использовать g++ - это же с++, не просто с (если нет, то установить - sudo apt-get build-essential)
g++ -o asd asd.cpp
это так,
но нужно иметь в виду, что в проекте GCC нет отдельных компиляторов для С, С++ ... ADA, FORTRAN - это всё один и тот же компилятор, но с разными настройками в опциях при запуске.
это бывает интересно посмотреть вот так:
[olej@notebook ~]$ which g++
/usr/lib/ccache/g++
[olej@notebook ~]$ ls -l /usr/lib/ccache/
итого 0
lrwxrwxrwx 1 root root 16 Май 25 2011 c++ -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 Май 25 2011 cc -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 Май 25 2011 g++ -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 Май 25 2011 gcc -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 Май 25 2011 i686-redhat-linux-c++ -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 Май 25 2011 i686-redhat-linux-g++ -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 Май 25 2011 i686-redhat-linux-gcc -> ../../bin/ccache
- это всё ссылки!
(make по дефаулту, кстати, определяет имя С-компилятора как сс, а не gcc, так что лучше имя gcc вообще не использовать, а использовать cc - в Linux это будет gcc, а в Solaris - Sun Compiler)
так что можете, в конце концов, использовать любое имя ... а для языка предполагаемого указывать явно опцию:
$ gcc --help
...
-x <язык> Задать язык последующих входных файлов.
<язык> может быть: c c++ assembler none
'none' означает, что далее язык нужно
определять по расширению имени файла
...
(подробнее посмотрите в man gcc).