Go4Expert

Go4Expert (http://www.go4expert.com/)
-   C (http://www.go4expert.com/articles/c-tutorials/)
-   -   Commonly used C Preprocessor Directives (http://www.go4expert.com/articles/commonly-c-preprocessor-directives-t1457/)

shabbir 22Sep2006 15:56

Commonly used C Preprocessor Directives
 
Commonly used C Preprocessor Directives

#define


You can use the #define directive to give a meaningful name to a constant in your program. The two forms of the syntax are:

Syntax :
#define identifier token-string

#define identifier[( identifier, ... , identifier )] token-string

The #define directive substitutes token-string for all subsequent occurrences of an identifier in the source file.

#error



Syntax :
#error token-string

When #error directives are encountered, compilation terminates. These directives are most useful for detecting programmer inconsistencies and violation of constraints during preprocessing.

Example :
Code:

#if !defined(__cplusplus)
#error C++ compiler required.
#endif

#undef


As its name implies, the #undef directive removes (undefines) a name previously created with #define.

Syntax

#undef identifier

#if, #elif, #else, #endif


The #if directive, with the #elif, #else, and #endif directives, controls compilation of portions of a source file. If the expression you write (after the #if) has a nonzero value, the line group immediately following the #if directive is retained in the translation unit.

Syntax
Code:

#if
    line text
#elif
    line text
#else
    line text
#endif

#include


The #include directive tells the preprocessor to treat the contents of a specified file as if those contents had appeared in the source program at the point where the directive appears.

Syntax

#include "path-spec"

This form instructs the preprocessor to look for include files in the same directory of the file that contains the #include statement

#include <path-spec>

This form instructs the preprocessor to search for include files first along the path specified by the /I compiler option, then along the path specified by the INCLUDE environment variable.

#ifdef, #ifndef


The #ifdef and #ifndef directives perform the same task as the #if directive when it is used with defined( identifier ).

Syntax

#ifdef identifier

#ifndef identifier


is equivalent to

#if defined identifier

#if !defined identifier


#pragma



Each implementation of C and C++ supports some features unique to its host machine or operating system. Some programs, for instance, need to exercise precise control over the memory areas where data is placed or to control the way certain functions receive parameters. The #pragma directives offer a way for each compiler to offer machine- and operating-system-specific features while retaining overall compatibility with the C and C++ languages. Pragmas are machine- or operating-system-specific by definition, and are usually different for every compiler.

Syntax

#pragma token-string

token-string can be any one of the following.

alloc_text
comment
init_seg1
optimize
auto_inline
component
inline_depth
pack
bss_seg
data_seg
inline_recursion
pointers_to_members1
check_stack
function
intrinsic
setlocale
code_seg
hdrstop
message
vtordisp1
const_seg
include_alias
once
warning

Instead of going into the details of what each one of them is I would discuss the most commonly used one here as thats the title of the article and that is once.

It specifies that the file, in which the pragma resides, will be included (opened) only once by the compiler in a building of a particular file.

#pragma once

There is one big confusion among the developers that header file is included once if it contains #pragma once only for the entire build but actually thats not the case. When you have two files code1.cpp and code2.cpp and one header file header.h. Put #pragma once and then a variable declaration in the header file as int iTest = 10; and try including the header file from both the cpp files and you will see an error like iTest already defined in xxxx.obj.

This is not because #pragma is not working but actually the concept is for the compilation of the .cpp file a header file can be included multiple times from different locations and that is prevented using the #pragma once

rahul.mca2001 6Mar2008 13:59

Re: Commonly used C Preprocessor Directives
 
can we #define something to be used latter for setting values


All times are GMT +5.5. The time now is 11:36.