Up to this point, we have been very careful in every single example to use proper indentation, always the end of a statement at the end of a line, etc. This will, we hope, make you agree that code can be quite readable and comprehensible. Whitespace in C++ is, however, not very necessary, as the following example, which you can cut-and-paste into cpp.sh will show.
#include <stdio.h>
main(int t,int _,char *a){return!0<t?t<3?main(-79,-13,a+main(-87,1-_,main(-
86,0,a+1)+a)):1,t<_?main(t+1,_,a):3,main(-94,-27+t,a)&&t==2?_<13?main(2,_+1
,"%s %d %d\n"):9:16:t<0?t<-72?main(_,t,"@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/\
*{*+,/w{%+,/w#q#n+,/#{l+,/n{n+,/+#n+,/#;#q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'K\
:'+}e#';dq#'l q#'+d'K#!/+k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/\
+#n';d}rw' i;# ){nl]!/n{n#'; r{#w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w#q#n'\
wk nw' iwk{KK{nl]!/w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c ;;{nl'-{}\
rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;#'rdq#w! nr'/ ') }+}{rl#'{n' ')#}'+}##(!\
!/"):t<-50?_==*a?putchar(31[a]):main(-65,_,a+1):main((*a=='/')+t,_,a+1):0<t
?main(2,2,"%s"):*a=='/'||main(0,main(-61,*a,"!ek;dc i@bK'(q)-[w]*%n+r3#l,{\
}:\nuwloca-O;m .vpbks,fxntdCeghiry"),a+1);}
Challenge: Try running it, find the typo, and then fix the typo in the source file.
The only common place you need white space is between a keyword and either a variable name or literal or a type name and a variable name (there are a few more, but they tend to be less obvious). For example, the following is an implementation of the greatest common denominator.
int gcd(int m,int n){if(m<n)std::swap(m,n);while(n>0){int t=m%n;m=n;n=t;}return m;}
The following is also valid:
int
gcd
(
int
m
,
int
n
)
{
if
(
m
<
n
)
std
::
swap
(
m
,
n
)
;
while
(
n
>
0
)
{
int
t
=
m
%
n
;
m
=
n
;
n
=
t
;
}
return
m
;
}
as is the following representation (of what?) equally acceptable to the compiler:
int
gcd (int
m , int n ) { if (
m < n ) std :: swap
( m , n ) ; while
( n > 0 ) { int t
= m % n ; m
=n;n=t ; } return m ; }
However, just because something is possible, this does not mean it is good. Always use whitespace to clarify your code, including:
templatevoid f(); void f() { if ( ... ) { if }