Validity of macro for printf() call in a corporate environment
Although the C standard can allow void main() under certain implementations, it's best to use int main() whenever possible.  See this for more info on the return type of main().
A loop is not a good use of a macro:


#define printS for(i=0;s[i];i++){printf("%c",s[i]);}



It should instead be a function:

void printS()
{
    for (i = 0; s[i]; i++)
    {
        printf("%c",s[i]);
    }
}


#define is a pre-processor directive (or a macro) that will replace the designated piece of code with something else.  While you can use this with loops, it's still discouraged as there are cleaner alternatives in C, such as functions.
Your two variables above main() are in global scope, which is almost always discouraged.  Anything in global that's not a constant can be modified anywhere in the program, which can introduce bugs and hurt maintenance.  You should keep variables as close in scope as possible, such as in functions.  You can then pass them to other functions as needed.

Assuming this is pre-C99, i should be declared right before the loop.  Otherwise, it should be initialized within the loop statement.
Functions in C that take no arguments should have a void parameter:

void main(void)

Consider adding more whitespace between operators for more readability.

Using your single-line loop as an example:


for(i=0;s[i];i++){printf("%c",s[i]);}



You could have something like this:

for (i = 0; s[i]; i++) { printf("%c", s[i]); }



Implementation with changes applied:

#include &lt;stdio.h&gt;

void printS(char s[])
{
    int i;
    for (i = 0; s[i]; i++)
    {
        printf("%c", s[i]);
    }
}

int main(void)
{
    char s[] = "Hello World!\n";
    printS(s);
}