Why does sequence iteration work in C macro?
When writing C macro, there is a trick called "sequence iteration". It looks like as follow: #define CAT(a, ...) PRIMITIVE_CAT(a, __VA_ARGS__) #define PRIMITIVE_CAT(a, ...) a ## __VA_ARGS__ #define FUNCTION(name) void name(); #define FUNCTION_TABLE(seq) CAT(FUNCTION_TABLE_1 seq, _END) #define FUNCTION_TABLE_1(x) FUNCTION(x) FUNCTION_TABLE_2 #define FUNCTION_TABLE_2(x) FUNCTION(x) FUNCTION_TABLE_1 #define FUNCTION_TABLE_1_END #define FUNCTION_TABLE_2_END FUNCTION_TABLE((x) (y) (z) (e)) The sequence, i.e. the argument of FUCTION_TABLE, will be processed one by one. However, as far as I know, a token will not be expanded twice in the same scope. Because it is "painted blue". When FUNCTION_TABLE_2 is expanded, the macro FUNCTION_TABLE_1 has already been painted yet. Why is it still expanded?
Create JSON structure based on input variables
C++ range for loop different than regular for loop [closed]
C++ boost thread causes segmentation fault when instantiated twice
c++ - 3 bears in a vector of a struct, how can I change this code so the specific bear at the exit is removed?
Reading from excel/text file without skipping whitespaces unless made by a tab
How to initialize const size array in constructor without explicitly stating the size in class declaration?
Reading txt file into 2d array C++
How can I mark a function with an attribute conditionally on the value of a parameter?
Read a text file and store into two different arrays: a string array and float array
converting constructor: How do you explain a function given different arguments in c++
Background in Qt multiplies instead of fitting into window size
C++ pause this program using cin.get()
linking error in utility::conversions::to_string_t in qt creator
readLine() not being saved properly
Check socket with select() before using send()
Error: “Function” not declared in this scope