The same is true of std::endl. std::endl is simply defined as << '\n' << std::flush
; nothing more, nothing less. In all cases where endl gives you a "properly translated" newline, so does \n
.
barubary
std::endl provides zero portability benefits. C++ does have a portable newline abstraction, but it is called \n
, not endl.
Multiple UI panes and a backend server? You mean lke emacs?
My CGI script is a SaaS.
for (int i = INT_MIN; ; i++) { ... if (i == INT_MAX) break;}
Incidentally, this is an anti-pattern: http://mywiki.wooledge.org/BashPitfalls#cmd1_.26.26_cmd2_.7C.7C_cmd3
Arguably, I never fully learned Bash syntax, but it also is just a stupid if-statement. There shouldn’t be that much complexity in it.
There isn't. The syntax is
if COMMANDthenCOMMAND(s)...elseCOMMAND(s)...fi
I believe, if you write the then onto the next line, then you don’t need the semicolon.
Yes, but that's true of all commands.
foo; bar; baz
is the same as
foobarbaz
All the ]
and -z
stuff has nothing to do with if
. In your example, the command you're running is literally called [
. You're passing it three arguments: -z
, "$var"
, and ]
. The ]
argument is technically pointless but included for aesthetic reasons to match the opening ]
(if you wanted to, you could also write test -z "$var"
because [
is just another name for the test
command).
Since you can logically negate the exit status of every command (technically, every pipeline) by prefixing a !
, you could also write this as:
if ! test "$var"; then ...
The default mode of test
(if given one argument) is to check whether it is non-empty.
Now, if you don't want to deal with the vagaries of the test
command and do a "native" string check, that would be:
case "$var" in "") echo "empty";; *) echo "not empty";;esac
Isn't this COBOL or 4GL or something?
@racketlauncher831 As far as the C compiler is concerned, there is literally no difference between those two notations. If you declare a function parameter as an array (of T), the C compiler automatically strips the size information (if any) and changes the type to pointer (to T).
(And if we're talking humans, then char *args[]
does not mean "follow this address to find a list of characters" because that's the syntax for "array of pointers", not "pointer to array".)
Yeah, just don't make any mistakes and you'll be fine. Come on guys, how hard can it be?