AC-Archive
Autoconf Macro Archive

ac-archive.sf.net: - Project CVS - Download
Macro Index
- AM Support
- C++ Support
- C Support
- Fortran Support
- Java Support
- Cross Compilation
- Installed Packages
- Miscellaneous
- LaTeX Support
- Uncategorized
- archive macros
- adl's macros
- bkorb's macros
- guidod's macros
- latex's macros
- other's macros
- rleigh's macros
- obsoleted macros
- released macros
- search index

Documentation
- Contribute!
- History
- acincludedir m4
- acinclude (tool)
- macro howto
- ax tricks
- maintainers
- License
- Topics

generated...
2007-08-05

(C) 2007 guidod
Download the M4 Source.

ax_c_declare_block

Back to the Main Page.

Synopsis
AX_C_DECLARE_BLOCK ,

if C variables must be declared at the beginning of a block

Version

2006-08-10

Author

Guido U. Draheim <guidod@gmx.de>

Category

guidod's C Support (released)

Documentation

The macro will compile a test program to see whether the compiler does allow new variable declarations in the middle of a C statement block, i.e. after some non-declaration line. New compilers will allow that which makes the behave a bit more like C++ - the gcc did support it for quite a time already.

#define DECLARE_BLOCK_NEEDED says they need to be at the beginning of of a statement block. Additionlly two defines DECLARE_BLOCK { and DECLARE_END } are being set. That makes it possible to do the following in your source code (which this macro is really made up for):

#define ___ DECLARE_BLOCK
#define ____ DECLARE_END

int f() {

 char buffer[1024];
 fgets(buffer, 1024, stdin);
 ___ int i; int ii = strlen(buffer);
 for (i=0; i < ii; i++) { 
    fputc(buffer[i], stdout); 
 }____;

}

@licence GPLWithACException

M4 Source Code
AC_DEFUN([AX_C_DECLARE_BLOCK],[dnl
AC_CACHE_CHECK(
 [if C variables must be declared at the beginning of a block],
 ax_cv_c_declare_block,[
 AC_TRY_COMPILE([#include &lt;stdio.h&gt;
 int f() {
   char buffer[1024];
   fgets(buffer, 1024, stdin);
   int i; int ii = strlen(buffer);
   for (i=0; i &lt; ii; i++) { 
     fputc(buffer[i], stdout);
   }
 }],
 [],
 ax_cv_c_declare_block=no, ax_cv_c_declare_block=yes)])
 if test "$ax_cv_c_declare_block" = yes; then
   AC_DEFINE([DECLARE_BLOCK_NEEDED],[1],
    [if C variables must be declared at the beginning of a block])
   AC_DEFINE([DECLARE_BLOCK],[{],
    [set to { if variable declarations need a block start before])
   AC_DEFINE([DECLARE_END],[}],
    [set to } if variable declarations need a block start before])
 fi
])