相关疑难解决方法(0)

是否有可能在可变参数宏中迭代参数?

我想知道是否有可能迭代传递给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 foreach c99 variadic c-preprocessor

66
推荐指数
5
解决办法
5万
查看次数

你能在宏中大写粘贴的令牌吗?

在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)

谢谢,瑞恩

c macros

34
推荐指数
3
解决办法
2万
查看次数

不能通过预处理器指令将小写转换为大写字符串

我做了一个程序,将小写字母转换为大写字母.我知道如何通过预处理程序指令将字符串转换为大写字母,但我不知道如何为字符串做.

#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)

c

2
推荐指数
1
解决办法
5001
查看次数

标签 统计

c ×3

c-preprocessor ×1

c99 ×1

foreach ×1

macros ×1

variadic ×1