Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
Closed 6 years ago.
Edit the question to include desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem. This will help others answer the question.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Improve this question
I have a huge code base. It has statement as shown below:
int a = ( (unsigned int) ((unsigned char) buffer[offset++]) << 8) | (unsigned int) (unsigned char) buffer[++offset];
Recently I migrated to higher version of a compiler. With compiler migration, evolution of complex statements as shown above resulted in inconsistent results.
I know this is a bad coding practice and want to correct it. Looking for static analyser which can flag these errors. Any pointers to perticular static analyser is appreciated.
It's not just bad coding practice.
It's dreadful. You are introducing an absolute truck load of undefined behaviour into your program.
|, unlike ||, is not a sequencing point. You are increasing offset twice, conceptually at the same time. The C standard does not define this behaviour.
You need to fix this immediately. Shelve the static analyser for now. Your compiler warning flag suite might be able to help you. But if I were in your position, I'd be in panic mode and I'd search my code base for ++ and --, and check every expression.
Related
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
Questions concerning problems with code you've written must describe the specific problem — and include valid code to reproduce it — in the question itself. See SSCCE.org for guidance.
Closed 9 years ago.
Improve this question
I have experienced a strange problem when using assert in my program.
The program does not terminate even when I add a line of codeassert(false).
But the assert works when I write several lines of sample code. Anybody know why it happened?
If you have:
#define NDEBUG
this turns all assert's into nop's.
If you have differing behaviour, depending on the amount of code, then I guess you don't have NDEBUG defined and I would guess the compiler is simply compiling out the redundant code.
More details about environment are required, however, you give a definitive answer.
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 1 year ago.
Improve this question
Is the ^ operator available in the C language? I have tried using it but it gives a faulty output.
Does it denote raising an integer to the power of something
It works just fine and means bitwise XOR. That is, 1^2 gives 3.
Unfortunately C doesn't provide a function to take power of integers. This is a known flaw of the language. You have to roll out such a function yourself either by using multiplication in a loop, or use the slow floating point function pow.
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 1 year ago.
Improve this question
I need a method to extract list of all local declared variables inside a function in a C source code with their line number. Is there a possible way.. I need this list to add and intialize stub variables after the local variable declaration.
Within the context of a C program?
No. Local variables don't really "exist" in C code. They're all constructs made for the programmer's convenience. This is because humans are really bad at remembering random 64-bit numbers and variable length machine opcodes.
You can do this via external tools, but these don't work at compile time and can't alter the compiled code.
You're asking about "reflection", and C basically has zero reflection features. Either something is defined and compiles, or it isn't and it doesn't. There is no way to ask if some function or variable is defined and change the code's behaviour.
The only facility you have is #define macros for pre-processing, and while you can get exceptionally creative and devious with these, there are limits to what you can and, more importantly, should do.
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
This question does not appear to be about a specific programming problem, a software algorithm, or software tools primarily used by programmers. If you believe the question would be on-topic on another Stack Exchange site, you can leave a comment to explain where the question may be able to be answered.
Closed 7 years ago.
Improve this question
In reading the man pages for tcpdump, I saw that the -dd arguement would output the dump as a fragment of a C file. In what situations is that useful? I take it this is to quickly include and compile the fragment in a program that will be used to process the data according to code we write ourselves? Does this have its utility with unknown or new protocols? Is there some other common, standing situation in which this is needed? Just curious.
It's useful if you're writing a program using libpcap/WinPcap that would use a filter but that, for whatever reason, wouldn't run pcap_compile() to translate a filter string into BPF machine code; it lets you do the compilation with tcpdump and generate some text that you could use in the initialization of an array of struct bpf_insn (a pointer to which, and a count of elements in which, you'd put in a struct bpf_program).
I'm not sure who would do that, however.
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 8 years ago.
Improve this question
I remember from some time ago reading about a commandline tool that explains C code, does anyone know what it might be named?
Perhaps you mean cdecl, a program that can translate complicated declarations to English and back?
e.g.
cdecl> explain int (*(*foo)(int ))(float )
declare foo as pointer to function (int) returning pointer to function (float) returning int
If you mean explaining then I think the answers already been given. If you mean looking for potential problems then there's lint and its variants, first stop in any code review.
http://en.wikipedia.org/wiki/Lint_programming_tool
Edit:
C/C++ Free alternative to Lint?
HTH