On Fri, 4 Feb 2022 at 11:36, Krishna Narayanan via Gcc-help <gcc-help@xxxxxxxxxxx> wrote: > > Respected sir, > I went through the compiler flags and mistake was on my side using the 'w' > suppressor flag to remove the warnings without knowing it.Thanks for the > docs and reply. > > By unicode I meant there is a question mark inside a diagonal.(unicode > error symbol) That means it's printing garbage characters that can't be processed as valid UTF-8, so explicitly NOT unicode. Calling that unicode is very confusing. > Sir this is perspective with the third print that is > "cc"+foobar() where I get zR for gcc (9.3.0) and unicode for g++-10.1. > I got your point regarding the garbage value and to throw a warning is > better than to get such an unwanted output. > > I thought there would be a specific reason why it had come because in const > char *a ="aa"+'operator/number' i.e when I add some character with some > change it gives blank space for numbers and operators, where as for > addition of 'a' in *a= "aa"+'a' it give 4 times the unicode symbol but for > *c="cc" +'c' and *b="bb"+'b' gives a space as output.Yes it has been quite > unpredictable and undefined behaviour. The nature of undefined behaviour is to be unpredictable. Compile with -fsanitize=address to get a lot more detail about what your buggy code is doing. You'll see an explanation of where the pointer arithmetic goes, and what's in memory there. > > So has the request of warning been granted in the upcoming gcc version!? Do you get any warning when compiling your buggy example with gcc? I don't. However, when I compile it with clang I get: oflow.c:10:23: warning: adding 'char' to a string does not append to the string [-Wstring-plus-int] const char *b = "bb" + bar(); ~~~~~^~~~~~~ oflow.c:10:23: note: use array indexing to silence this warning const char *b = "bb" + bar(); ^ & [ ] oflow.c:11:22: warning: adding 'int' to a string does not append to the string [-Wstring-plus-int] const char *c = "cc" + foobar(); ~~~~~^~~~~~~~~~ oflow.c:11:22: note: use array indexing to silence this warning const char *c = "cc" + foobar(); ^ & [ ] 2 warnings generated.