Microsoft KB Archive/50234

From BetaArchive Wiki
Knowledge Base


Article ID: 50234

Article Last Modified on 7/5/2005



APPLIES TO

  • Microsoft C Professional Development System 6.0
  • Microsoft C Professional Development System 6.0a
  • Microsoft C Professional Development System 6.0a
  • Microsoft C Professional Development System 6.0
  • Microsoft C Professional Development System 6.0a
  • Microsoft C/C++ Professional Development System 7.0
  • Microsoft Visual C++ 1.0 Professional Edition
  • Microsoft Visual C++ 1.5 Professional Edition
  • Microsoft Visual C++ 5.0 Learning Edition
  • Microsoft Visual C++ 2.0 Professional Edition
  • Microsoft Visual C++ 4.0 Professional Edition



This article was previously published under Q50234

SUMMARY

The information in this article is included in the documentation starting with Visual C++ 5.0. Look there for future revisions. When a function name declared in your program is used without parentheses, the compiler does not produce any code. The compiler may not produce error messages or warnings as long as the function has been prototyped. This occurs regardless of whether or not the function takes parameters because the compiler calculates the function address; however, because the function call operator "()" is not present, no call is made. This result is similar to the following:

   int a;

   a;      /* no code generated here either */ 
                

In Microsoft C versions 6.0, 6.0a, and 6.0ax, the following warning is generated on warning level 4:

warning C4205: statement has no effect

In Microsoft C/C++ version 7.0, 16-bit Visual C++ version 1.XX, and 32-bit Visual C++ version 1.0, using warning level 4 generates the following:

warning C4705: statement has no effect with /W4

The warning is only generated when compiling with the optimizing compiler and does not occur if the fast (/f) compiler is used.

In Microsoft 32-bit Visual C++ versions 2.0 and above, even using warning level 4 generates no diagnostic output. No warning issued, no code is produced.

MORE INFORMATION

The sample code below compiles and links correctly without errors but produces no code in reference to myfunc(). For this to work correctly, add the function call operator "()".

Sample Code

/* Compiler Options needed: /W4     (C6.0, C6.0a, C6.0ax and 8.00 for
                                     Visual C++ for Windows NT)
                            /f- /W4 (7.0, and 8.0 for Visual C++
                                     for Windows)
*/ 

void funcname(int a, int b);
void main(void)
{
     funcname;   /* Using myfunc without function call operator () */ 
}
                


Additional query words: 1.00 1.50 2.00 4.00 6.00 6.00a 6.00ax 7.00 8.00 8.00c 9.00

Keywords: kbcompiler KB50234