# Use of \foreach and \csname<macro name>\endcsname together

When I compile this minimum LaTeX file:

\documentclass{report}

\def\defMacro#1#2{\expandafter\def\csname#1\endcsname{#2}}
\def\useMacro#1{\csname#1\endcsname}

\usepackage{pgffor}

\begin{document}
\foreach \n in {0,1,...,10}{
\defMacro{number:\n}{\n}
}

\useMacro{number:8}
\end{document}


I obtain no PDF output. What do I mistake?

-
The etoolbox package provides \csdef and \csuse which do the same as \defMacro and \useMacro. LaTeX itself defines \@namedef and \@nameuse. The \csuse macro takes care not to define the given macro (equal to \relax) if it doesn't exists. It expands to nothing in this case. –  Martin Scharrer Apr 20 '11 at 15:23

The \foreach loop content is executed in a group for each iteration, therefore the definition is only local. You would need to add \global in front of \defMacro.
The reason the \useMacro is not causing an error is because \csname has the side effect that the resulting macro is defined equal to \relax if is was undefined before.
@Azoun: Note that this of course makes all \defMacro definitions global, which might be an issue dependent on the use. For your own private macros this shouldn't be an issue, but I wouldn't do that for package code. –  Martin Scharrer Apr 20 '11 at 15:36