我想知道是否有可能迭代传递给C99中的可变参数宏或使用任何GCC扩展的参数?
例如,是否可以编写一个通用的宏,它接受一个结构,并将其字段作为参数传递,并打印结构中每个字段的偏移量?
像这样的东西:
struct a {
int a;
int b;
int c;
};
/* PRN_STRUCT_OFFSETS will print offset of each of the fields
within structure passed as the first argument.
*/
int main(int argc, char *argv[])
{
PRN_STRUCT_OFFSETS(struct a, a, b, c);
return 0;
}
在C宏中,是否可以大写粘贴的令牌?例如,我目前有以下宏:
#define TEST(name, keyword) \
test_##name:
TEST_##keyword##_KEYWORD
Run Code Online (Sandbox Code Playgroud)
我会调用如下:
TEST(test1, TEST1)
Run Code Online (Sandbox Code Playgroud)
这会产生以下结果:
test_test1:
TEST_TEST1_KEYWORD
Run Code Online (Sandbox Code Playgroud)
现在,不是必须两次输入相同的名称(一次使用所有小写字符,再次使用所有大写字符),是否有任何方法可以执行以下任一操作,并将标记更改为全部大写字母还是所有小写字母?
TEST(test1) or TEST(TEST1)
Run Code Online (Sandbox Code Playgroud)
谢谢,瑞恩
我做了一个程序,将小写字母转换为大写字母.我知道如何通过预处理程序指令将字符串转换为大写字母,但我不知道如何为字符串做.
#include<stdio.h>
#include<conio.h>
#include<ctype.h>
#define UPPER([]) ([]-32)
void fstring_convert(char string[]);
void main(void)
{
char string[40];
printf("Enter a string:");
gets(string);
fstring_convert(string);
printf("%s",string);
getch();
}
void fstring_convert(char string[])
{
int i;
for(i=0; ;i++)
{
if(string[i]==' ')
{
string[i]=string[i+1];
}
if(isdigit(string[i]))
{
string[i]+=1;
}
UPPER('string[i]');
if(string[i]=='\0')
break;
}
}
Run Code Online (Sandbox Code Playgroud)