C Preprocessor Error Pragma
Contents |
Three forms of this directive (commonly known as pragmas) are specified by the 1999 C standard. A C compiler is free to attach any meaning it likes to other pragmas. GCC has historically preferred to use extensions to the syntax c preprocessor error directive of the language, such as __attribute__, for this purpose. However, GCC does define a c preprocessor error macro few pragmas of its own. These mostly have effects on the entire translation unit or source file. In GCC version 3, all
Ifdef Preprocessor
GNU-defined, supported pragmas have been given a GCC prefix. This is in line with the STDC prefix on all pragmas defined by C99. For backward compatibility, pragmas which were recognized by previous versions are still recognized
Pragma In C
without the GCC prefix, but that usage is deprecated. Some older pragmas are deprecated in their entirety. They are not recognized with the GCC prefix. See Obsolete Features. C99 introduces the _Pragma operator. This feature addresses a major problem with ‘#pragma’: being a directive, it cannot be produced as the result of macro expansion. _Pragma is an operator, much like sizeof or defined, and can be embedded in pragma c++ a macro. Its syntax is _Pragma(string-literal), where string-literal can be either a normal or wide-character string literal. It is destringized, by replacing all ‘\\’ with a single ‘\’ and all ‘\"’ with a ‘"’. The result is then processed as if it had appeared as the right hand side of a ‘#pragma’ directive. For example, _Pragma ("GCC dependency \"parse.y\"") has the same effect as #pragma GCC dependency "parse.y". The same effect could be achieved using macros, for example #define DO_PRAGMA(x) _Pragma (#x) DO_PRAGMA (GCC dependency "parse.y") The standard is unclear on where a _Pragma operator can appear. The preprocessor does not accept it within a preprocessing conditional directive like ‘#if’. To be safe, you are probably best keeping it out of directives other than ‘#define’, and putting it on a line of its own. This manual documents the pragmas which are meaningful to the preprocessor itself. Other pragmas are meaningful to the C or C++ compilers. They are documented in the GCC manual. GCC plugins may provide their own pragmas. #pragma GCC dependency#pragma GCC dependency allows you to check the relative dates of the current file and another file. If the other file is more recent than the current file, a warning is issued. This is useful if the current file is de
here for a quick overview of the site Help Center Detailed answers to any questions you might have Meta Discuss the workings and policies of this site About Us Learn more about
#pragma In Embedded C
Stack Overflow the company Business Learn more about hiring developers or posting ads with pragma pack in c us Stack Overflow Questions Jobs Documentation Tags Users Badges Ask Question x Dismiss Join the Stack Overflow Community Stack Overflow is pragma meaning a community of 4.7 million programmers, just like you, helping each other. Join them; it only takes a minute: Sign up C preprocessor: expand macro in a #warning up vote 19 down vote favorite 9 https://gcc.gnu.org/onlinedocs/cpp/Pragmas.html I would like to print a macro value (expand the macro) in the #warning directive. For example, for the code: #define AAA 17 #warning AAA = ??? The desired compile-time output would be warning: AAA = 17 What do I use for ???, or, how do I augment the code? c gcc c-preprocessor share|improve this question edited Nov 2 '14 at 18:56 AstroCB 7,849113261 asked Sep 28 '12 at 9:35 http://stackoverflow.com/questions/12637392/c-preprocessor-expand-macro-in-a-warning elomage 1,70811015 1 According to the C standard from 1999, you only have #error for something like that and it does not expand any macros, it just prints the text literally and causes compilation to stop. What are you trying to achieve with this anyway? –Alexey Frunze Sep 28 '12 at 9:41 I have a hierarchy of many makefiles that define AAA in various ways, depending on the make target parameters. I would like to verify that the definition is correct for the target. And I would not want to create a list of #if AAA = 1 ... #warning "is 1"... –elomage Sep 28 '12 at 9:44 Also, this is for the embedded world with no displays, so I can not easily test the macro value by adding something like printf( #AAA ); and check it at runtime. –elomage Sep 28 '12 at 9:58 So you do #if A == 1\#error A = 1\#elif A == 2\#error A = 2\#endif. –Alexey Frunze Sep 28 '12 at 10:00 @AlexeyFrunze That is exactly what I want to avoid - see my comment above. I may not know all the possible values, or there might be too many of those.
the C compiler to transform your program before actual compilation. It is called a macro processor because it allows you http://tigcc.ticalc.org/doc/cpp.html to define macros, which are brief abbreviations for longer constructs. Preprocessor Overview Header Files Macros Conditionals Pragmas Other Directives User-defined Diagnostics Line Control Preprocessor Output C Preprocessor Command-Line Options Traditional Mode Implementation Details History GNU General Public License GNU Free Documentation License Funding Free Software Original author: Free Software Foundation, Inc. Authors of the modifications: Zeljko Juric, Sebastian Reichelt, c preprocessor and Kevin Kofler Published by the TIGCC Team. See the History section for details and copyright information. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation. A copy of the license is included in the section entitled c preprocessor error "GNU Free Documentation License". This manual contains no Invariant Sections. The Front-Cover Texts are (a) (see below), and the Back-Cover Texts are (b) (see below). (a) The FSF's Front-Cover Text is: A GNU Manual (b) The FSF's Back-Cover Text is: You have freedom to copy and modify this GNU Manual, like GNU software. Copies published by the Free Software Foundation raise funds for GNU development. Preprocessor Overview The C preprocessor, often known as cpp, is a macro processor that is used automatically by the C compiler to transform your program before compilation. It is called a macro processor because it allows you to define macros, which are brief abbreviations for longer constructs. The C preprocessor is intended to be used only with C, C++, and Objective-C source code. In the past, it has been abused as a general text processor. It will choke on input which does not obey C's lexical rules. For example, apostrophes will be interpreted as the beginning of character constants, and cause errors. Also, you cannot rely on it preserving chara