Gcc #error Preprocessor
Contents |
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
#warning Gcc
Us Learn more about Stack Overflow the company Business Learn more about hiring #error in c developers or posting ads with us Stack Overflow Questions Jobs Documentation Tags Users Badges Ask Question x Dismiss Join the
C Preprocessor Message
Stack Overflow Community Stack Overflow is a community of 4.7 million programmers, just like you, helping each other. Join them; it only takes a minute: Sign up How do I generate an error invalid preprocessor command 'warning' or warning in the C preprocessor? up vote 19 down vote favorite 1 I have a program that must be compiled only in DEBUG mode. (testing purpose) How can I have the preprocessor prevent compilation in RELEASE mode? c-preprocessor share|improve this question edited Jun 25 at 23:11 phs 7,05722761 asked Feb 8 '10 at 12:29 Eonil 31.1k43203377 add a comment| 7 Answers 7 active oldest votes gcc #pragma message up vote 34 down vote accepted Place anywhere: #ifndef DEBUG #error Only Debug builds are supported #endif share|improve this answer answered Feb 8 '10 at 12:33 Hans Passant 655k819611605 add a comment| up vote 11 down vote C provide a #error statement, and most compilers add a #warning statement. The gcc documentation recommends to quote the message. share|improve this answer edited Nov 17 '15 at 17:28 answered Feb 8 '10 at 12:37 philant 22.9k94890 1 @Antonio Right, there is no [more] recommendation there. I replaced the link with one to gcc doc. –philant Nov 17 '15 at 17:29 add a comment| up vote 4 down vote You can use a error directive for that. The following code will throw an error at compile time if DEBUG is not defined: #ifndef DEBUG #error This is an error message #endif share|improve this answer edited Feb 8 '10 at 23:32 answered Feb 8 '10 at 12:34 Laurent Etiemble 21k44075 Sorry, I mix pragma and error while typing. Corrected in answer. –Laurent Etiemble Feb 8 '10 at 23:32 add a comment| up vote 4 down vote Maybe something more sofisticated, but it is only copy&paste of previous
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 Stack Overflow the company Business Learn more
#error C++
about hiring developers or posting ads with us Stack Overflow Questions Jobs Documentation Tags Users #error in c example Badges Ask Question x Dismiss Join the Stack Overflow Community Stack Overflow is a community of 4.7 million programmers, just like you, helping each
#warning C
other. Join them; it only takes a minute: Sign up Portability of #warning preprocessor directive up vote 38 down vote favorite 2 I know that the #warning directive is not standard C/C++, but several compilers support it, including http://stackoverflow.com/questions/2221517/how-do-i-generate-an-error-or-warning-in-the-c-preprocessor gcc/g++. But for those that don't support it, will they silently ignore it or will it result in a compile failure? In other words, can I safely use it in my project without breaking the build for compilers that don't support it? c++ compiler-construction warnings c-preprocessor portability share|improve this question edited Jun 3 at 20:00 Brian Tompsett - 汤莱恩 3,091132775 asked Oct 5 '08 at 3:40 jonner 3,05551927 add a comment| 5 Answers 5 active oldest votes http://stackoverflow.com/questions/171435/portability-of-warning-preprocessor-directive up vote 19 down vote accepted It is likely that if a compiler doesn't support #warning, then it will issue an error. Unlike #pragma, there is no recommendation that the preprocessor ignore directives it doesn't understand. Having said that, I've used compilers on various different (reasonably common) platforms and they have all supported #warning. share|improve this answer answered Oct 5 '08 at 3:53 Greg Hewgill 511k1088801044 add a comment| up vote 60 down vote It should be noted that MSVC uses the syntax: #pragma message ( "your warning text here" ) The usual #warning syntax generates a fatal error C1021: invalid preprocessor command 'warning' so it is not portable to those compilers. share|improve this answer answered Nov 11 '08 at 0:30 nolandda 1,09721015 20 This is one of the rare cases, when MS does things in the right way. –doc Aug 5 '10 at 14:05 Is MSVC syntax portable? I mean, would it properly generate a warning with other compilers? –aka.nice Jun 11 '13 at 13:34 Just ran a quick check using gcc-4.7.2. [$ gcc -c -Werror file.c] yields [file.c:10:9: note: #pragma message: Foo bar baz] So it produces a "note" that is not treated as a warning (i.e. It doesn't fail the build with -Werror enabled). But it appears parse correctly (as all #pragmas should be) so it is portable in that sense. &
tokens Description #error emits tokens to standard error, and increments the assembler error counter, hereby preventing the program from being successfully assembled. #error is specified in the ANSI C standard. #warning emits tokens to standard error, and increments the assembler warning counter. #warning http://www.atmel.com/webdoc/avrassembler/avrassembler.wb_preprocessor.error.html is not specified in the ANSI C standard, but is commonly implemented in preprocessors such as the GNU C preprocessor. #message emits tokens to standard output, and does not affect assembler error or warning counters. #message is not specified in the ANSI C standard.For all directives, the output will include file name and line number, like normal error and warning messages.tokens is a sequence of preprocessor tokens. Preprocessor macros are expanded except if appearing inside #error in quoted strings (").Example #error "Unsupported part:" __PART_NAME__ PrevUpNextHomeContentsSearchDocumentation HomeAVR AssemblerPrefaceAVR Assembler Known IssuesAVR Assembler Command Line OptionsAssembler sourceAVR Assembler SyntaxAssembler directivesAVR Assembler PreprocessorIntroductionPreprocessor directives#define#undef#ifdef#ifndef#if and #elif#else#endif#error, #warning and #message#include#pragma, general purpose#pragma , AVR part related# (empty directive)OperatorsStringification (#)Concatenation (##)Pre-defined macrosExpressionsInstruction mnemonicsArithmetic and logic instructionsBranch InstructionsData Transfer InstructionsBit and Bit-test InstructionsI/O RegistersInstruction Set Nomenclature:Instructions ADC - Add with Carry ADD - Add without Carry ADIW - Add Immediate to Word AND - Logical AND ANDI - #error in c Logical AND with Immediateand ASR - Arithmetic Shift Right BCLR - Bit Clear in SREG BLD - Bit Load from the T Flag in SREG to a Bit in Register. BRBC - Branch if Bit in SREG is Cleared BRBS - Branch if Bit in SREG is Set BRCC - Branch if Carry Cleared BRCS - Branch if Carry Set BREAK - Break BREQ - Branch if Equal BRGE - Branch if Greater or Equal Signed) BRHC - Branch if Half Carry Flag is Cleared BRHS - Branch if Half Carry Flag is Set BRID - Branch if Global Interrupt is Disabled BRIE - Branch if Global Interrupt is Enabled BRLO - Branch if Lower (Unsigned) BRLT - Branch if Less Than (Signed) BRMI - Branch if Minus BRNE - Branch if Not Equal BRPL - Branch if Plus BRSH - Branch if Same or Higher (Unsigned) BRTC - if the T Flag is Cleared BRTS - Branch if the T Flag is Set BRVC - Branch if Overflow Cleared BRVS - Branch if Overflow Set BSET - Bit Set in SREG BST - Bit Store from Bit in Register to T Flag in SREG CALL - Long Call to a Subroutine CBI - Clear Bit in I/O Register CBR - Clear Bits in Register CLC - Clear Carry Flag CLH - Clea