Description | Type | Link |
---|---|---|
Learn C++ A site with well structured lessons for absolute beginners. Goes over all concepts. |
~300 short Lessons | learncpp.com |
C++ Overview using the C++98 Standard One of the few tutorials using the C++98 standard. |
~ 25 medium length Articles | cplusplus.com |
C++ Super-FAQ A great FAQ about C++ ranging from newbie questions, learning C++ when coming from C, basic and advanced features of C++, coding standards to language updates. |
FAQ (100s of questions) | isocpp.org |
C++ Core Guidelines written by Bjarne Stroustrup himself Very useful to read about certain features of the language and for best practices, dos and don'ts. |
Knowledge Base (~25 sections) | isocpp.github.io |
42 Intra eLearning Videos Teaches the concepts needed for all modules. One video for each concept. |
~40 Videos | elearning.intra.42.fr |
Harvard C++ Quick Overview over New Features compared to C Concise introduction to C++ concepts with really clear code examples. |
1 Article | read.seas.harvard.edu |
C++ tutorial for C users A tutorial for C programmers who wish to learn C++, showing basic principles of C++. Lots of small code snippets. |
1 Article | ericbrasseur.org |
C++ for C Programmers - University of California, Santa Cruz A university professor goes over the benefits of C++ compared to C in a slow and easy to understand way. |
Video (8h 44min) | youtube.com |
C++ Programming Wikibook Easy to read, Wikipedia-style book. Great start when researching a new concept or feature. |
Online-Book (~650 pages) |
wikibooks.org |
A Tour of C++ - Book A short book that serves as an overview of all of standard C++, written by Bjarne Stroustrup. |
Book (~200 pages) |
|
C++ Primer (5th Edition) - Book In-depth tutorial and reference book. |
Book (~900 pages) |
|
The C++ Programming Language - Book Hardcore reference book written by Bjarne Stroustrup. |
Book (~1300 pages) |
|
C++ Weekly With Jason Turner Weekly videos about C++ (and Computer Science in general). |
400+ short-form Videos | youtube.com |
This alias automatically puts the numbers of the current CPP module and the current exercise at the very front as the scope of the commit. The numbers are extracted from the current directory.
Example:
You are in the directory cpp00/ex00
-> the scope would be 00/00
.
The alias also conveniently formats your commit messages according to the Conventional Commits - first a keyword, then the message.
It puts the first argument as the type of the commit, everything else as the message. The type is usually one of the following: feat
, fix
, refactor
, style
, test
, docs
, chore
. The message is a short description of the commit.
This is how you can use the alias:
git cml feat Convert program arguments to uppercase
Result:
[00/00] feat: Convert program arguments to uppercase
To set this alias up globally for your git configuration, run the following command.
If you prefer to set the alias up just for your CPP repository (so not globally across all repositories), simply remove the --global
option.
git config --global alias.cml '!f() {
local exercise_path=$(echo "$GIT_PREFIX" | sed '"'"'s/^..\///'"'"' | grep -oE '"'"'.*(/|^)ex[0-9]{2}(/|$)'"'"');
local module=$(dirname "$exercise_path" | xargs basename | sed '"'"'s/^\.$//'"'"');
local exercise=$(basename "$exercise_path");
if [ -z "$module" ] && [ -z "$exercise" ]; then
module=$(basename "$GIT_PREFIX");
fi;
local module_num=$(echo "$module" | grep -oE '"'"'[0-9]+'"'"');
local exercise_num=$(echo "$exercise" | grep -oE '"'"'[0-9]{2}'"'"');
local type=$1;
shift;
local message="$@";
local scope="";
if [ -n "$module_num" ] && [ -n "$exercise_num" ]; then
scope="[$module_num/$exercise_num] ";
elif [ -n "$module" ]; then
scope="[$module] ";
elif [ -n "$exercise" ]; then
scope="[$exercise] ";
fi;
if [ -n "$message" ]; then
git commit -m "$scope$type: $message";
else
git commit -m "$scope$type";
fi;
}; f'
If you prefer to use git commit
to edit your commit messages in your editor, you can use a git hook to automatically pre-populate the scope in the commit message file.
This means when you git commit
, the file that opens already has the scope of your commit in the first line.
-
Make sure you are in the root of your repository.
-
Run the following command:
cat << 'EOF' >> .git/hooks/prepare-commit-msg #!/bin/sh COMMIT_MSG_FILE=$1 COMMIT_SOURCE=$2 SHA1=$3 # Remove the "# Please enter the commit message..." help message. /usr/bin/perl -i.bak -ne 'print unless(m/^. Please enter the commit message/..m/^#$/)' "$COMMIT_MSG_FILE" # Only use if it's a regular commit without -m or -F case "$2,$3" in ,|template,) # Prepend the scope to the commit message file exercise_path=$(echo "$GIT_PREFIX" | sed 's/^..\///' | grep -oE '.*(/|^)ex[0-9]{2}(/|$)') module=$(dirname "$exercise_path" | xargs basename | sed 's/^\.$//') exercise=$(basename "$exercise_path") if [ -z "$module" ] && [ -z "$exercise" ]; then module=$(basename "$GIT_PREFIX") fi module_num=$(echo "$module" | grep -oE '[0-9]+') exercise_num=$(echo "$exercise" | grep -oE '[0-9]{2}') scope="" if [ -n "$module_num" ] && [ -n "$exercise_num" ]; then scope="[$module_num/$exercise_num] " elif [ -n "$module" ]; then scope="[$module] " elif [ -n "$exercise" ]; then scope="[$exercise] " fi sed -i "1i$scope" "$COMMIT_MSG_FILE" ;; *) ;; esac EOF chmod +x .git/hooks/prepare-commit-msg