C++ :: Compiler Not Always Be Able To Insert Code For A Function Inline
Apr 14, 2013
This: "The compiler may not always be able to insert the code for a function inline (such as with recursive functions or functions for which you have obtained an address), but generally, it will work."
For a function inline why wont it work for a recursive function or a function for which you have obtained an address?
I have observed that inline functions can not be prototyped. example:
.cpp file:
inline void whatever() { cout<< "this is inline"<< endl; }
.h file, prototype inline void whatever(); //would ask for a definition
Because of this, I have have just made functions that are used in only 1 .cpp file (ever) inlined, to make it more efficient (and it has demonstrated that it is more efficient). It's worked out fine so far, but what about the scope of the definition??
Since an inline function is like a templated function, in that it can't be prototyped, how are name conflicts resolved, and what is the best practice for writing inline functions??
Example of a conflict:
//in some arbitrary header... void do_somthing(); //in .cpp file that inlcudes the header... inline void do_somthing() { cout<< "I'm doing somthing!!"<< endl; } int main() { do_somthing(); //which one?? it compiles fine though!! return 0; }
I have some functions inlined using the inline function prefix. If the function is called from outside the file (so a seperate psp-gcc -O3 ... filename.c filename.o compile command, when only the function is changed), will the other files be updated too? (I'm using the pspsdk toolchain).
Example:
max.c inline byte max(byte a, byte b) { return a>b?a:b; } use1.c void use1() { if (max(1,2)==0)
[Code] ....
If I compile this, next change the max function and recompile using make (the compiler only takes the changed max.c->max.o file, next links them together) will use1.c&use2.c be updated with the new max.c function?
You can check it here: [URL] The output is correct, but in my machine with C++11, MinGW 4.8 (64 bit in a 64bit-Windows8), the output is incorrect. Why?
If you want more specific info, the problem is that I use input, I think. I use std::getline(std::cin, some_string).
I am not a C programmer (or a programmer at all). I am just a hobbyist who writes random code (i.e.: ignorant).C is not my area, and I my experience with it is quite LIMITED!Today, I found out that if I need to get "square root" in C I will be in trouble if I depend solely on the compiler..Is it possible to make the compiler to generate smarter code for this (quite trivial code):
Code:
void intprime_c(unsigned long* fprimes, unsigned long count) { unsigned long divc = 3; unsigned long num = 2; unsigned long sqr; unsigned long pfound = 0; }
[code]...
By "without ugly hacks" I mean using already existing code that came with GCC. Because the others did not need ugly hacks to perform better (it is all about being fair).To compute the "square root" in x86 one just need 3 instructions:
fild fsqrt fistp
But the compiler is generating a call to a "fsqrt" function and wasting a lot of time by doing this. If not, then why is it taking so long? Is it something wrong in my code (at least the output was verified to be the correct)?
Time taken to get the first 2500000 primes (x86_64):
Assembly = 72.400s (human written, unoptimized, coder level: newbie (i.e.: ignorant)) pascal = 75.200s (written by the same person) C (fsqrt) = 83.600s (written by the same person) C (sqrt) = 85.900s (written by the same person)
If it matters, I compiled the C code with this command: gcc -O2 -fno-omit-frame-pointer -fPIC -c ./prime.
I have a template class which defines a few heavy methods. For now, they are defined in the same .h file as the class definition, but i`d like to have them in a separate .cpp file.
A situation i find you describe in the FAQs arises: [URL] ....
Problem: the export keyword has been deprecated in c++0x, if i recall correctly, and has never been implemented in any of the compilers i am using (msvc, gcc).
#Including the the .cpp file after the class definition (as described in the second post of the FAQ) works.
another question: i have methods that dont use any template code. Can i somehow declare them as such? (more of an esthecial question, which would make it easier to distinguish between template and non.template code).
It is suppose to insert items in Linked List in sorted ascending order and no duplicates are allowed.The code complies but it creates duplicates out of order.
I am trying to implement the insert function of a binary tree. Atm when I try and insert 3 nodes, the program breaks and gives me a stack overflow error. The error points to a getter function for an identifier for the data in my node class.
void LinkedList::add(Product *myProduct) { if (_length==0) { _head = new Node(NULL, NULL, myProduct); _end = _head; _length=1;
[Code] ....
Here is my insert function, the error message is
"An unhandled exception of type 'System.NullReferenceException' occurred in SDI2.exe Additional information: Object reference not set to an instance of an object. "
In my main I have declared an instance of product, "productToAdd = new Product(id,idPrice);" so I'm a bit confused as to what I need to include..
I am unable to implement the insert function properly, every time i run the program i just get the first value and name, I am not getting other Id's and name.
"(Header File)" #include <iostream> #include <string> using namespace std; class node{ public: int ID; string name; class node *left, *right, *parent;
I am unable to implement the insert function properly,every time i run the program i just get the first value and name,i am not getting other Id's and name.
Code: "(Header File)" #include <iostream> #include <string> using namespace std; class node { public: int ID; node (string StudentName, int IDNumber) {
I have this piece of code from the book "Modern C++ Design" that checks for compile-time error. When i tried to compile it, i get the error "invalid application of size of to function type". How to make this compiler-time checker work?
this is my code i want to put the part where i have it do multiplication and addition into functions. and then call them so that it can run the addition and multiplication. Heres my code
# include <iostream> using namespace std; int main(){
I have a function that needs to return a "uint8_t" value. However before doing the processing I need to perform a test on the argument to check if it's between expected boundaries. Although this function works it gives (a logical) warning that not always a value is returned although expected. What is the normal way for functions like these where I normally should return e.g. -1 in case the test doesn't succeed and otherwise the uint8_t (t) value?
Code: uint8_t myFunc(int a) { if (a >= 0 && a <= 100) { // Perform actions uint8_t = ... return t; } }
I start working on CodeBlocks and stuck in a situation. The situation is that I want to clear my output screen every time the main function calls some other functions. To do that I use clrscr() function but its not working. After spending some times on web, I found that its a non-standard function so this extension is not used by the new compiler's. Another thing I find to use < cstdlib > library. But unfortunately it do works only for C. It works for C++.
I'm unable to use the function random(num); in Code::Blocks. It shows the error : error: 'random' was not declared in this scope while the same code works fine in Borland's Turbo C++. How do I rectify this?
I have a function which sometime takes more than 24 hours to run. So I want a code which will check the time and exit the function if the function executin is not successful and return to main function.
I want to implement some "debugger like" tool (very limited one, just identify at running time the current stack trace, and print messages from the user) on some code that the user wrote. what I get from the user is a function name (in the beginning of it's declaration), and when the user want to print some message he uses some print macro I should implement.
My target is printing the stack call, and all the messages that the user wrote, in the right place on the running place.
By what c++ feature can know on running time that a specific function code has ended??
Its easy to push a function to some vector when it called (since I get its name from the user), but when it ends and return to the function called it...
I am currently working on a c++ project that will input students and process their grades. I encountered a problem and my code stops executing after the getScores function. Im not sure what the problem is, but im guessing its something within the function and the loops.
//Name: getScores //Description: Will get scores for student //Parameters: None //Return: testScore double getScores()
I wrote a program with a recursive() called finder. But it dose not work properly,at run time it becomes to a infinite status. How to detect the error at runtime. Here is the code.
#include<stdio.h> void finder(int x,int y); int tot;
[Code] ....
I think the error is the changing value of x after a round of for loop.
We had to write a "selling program for computers, laptops and tablets", which I did but for the extra credit, we have to have those three points in the application and I have tried but how to do the "extra credit" part, which I really need.
1.) A loop to prompt the user if they would like to place another order
2.) At least one user-defined function
3.) An enumerated data type, array or struct (structure)
I did one of these three, it's a "DO WHILE" loop asking users if they want to make another order, it's right at the beginning of the code.