如何在char类型中省略引号用法?

时间:2013-12-13 09:12:19

标签: c function quotations

我很难根据自己的需要调整功能。首先看一下这三个文件并注意我必须在main函数中调用f_texture函数才能使它工作:

externs.h

#ifndef EXTERNS_H_
#define EXTERNS_H_

extern char t_about[100];
extern int friction;

extern int f_texture(char* ,char*);

#endif

functionA.c

#include <stdio.h>
#include "externs.h"

int main()
{
    f_texture("rough","friction");
    printf("Friction: %d\n", friction);
    f_texture("rough","t_about");
    return 0;
}

functionB.c

#include "externs.h"
#include <string.h>
#include <stdlib.h>
#include <assert.h>
#include <stdio.h>
char t_about[100];
int friction;

int f_texture(char* texture,char* what_is_needed)
{
    /*Checking if both values are present*/
    assert(what_is_needed);
    assert(texture);

    /*Static array in order to prevent it's disappearance*/
    memset(t_about, '\0', sizeof(t_about));

    /*Configuring variables for desired texture*/
    if (strcmp(texture, "smooth") == 0)
    {
        strcpy(t_about, "The surface is perfectly smooth, without any "
            "protuberances.\n");
        friction = 0;
    }
    else if (strcmp(texture, "rough") == 0)
    {
        strcpy(t_about, "Rough bumps can be feeled under my fingertips.\n");
        friction = 4;
    }
    /*In case of absent keyword of desired texture it will crash the program*/
    else
    {
        assert(!what_is_needed);
    }

    /*Returning desired value*/
    if (strcmp(what_is_needed, "t_about") == 0)
    {
        int i=0;
        while (t_about[i] != '\0')
            {
            printf("%c", t_about[i]);
            i++;
            }
    }
    else if (strcmp(what_is_needed, "friction") == 0)
    {
        return friction;
    }
    /*In case of absent keyword of desired value it will crash the program*/
    else
    {
        assert(!what_is_needed);
    }

    return 0;
}

现在我的问题是:如何重写此代码,以便可以在不使用引号的情况下调用f_texture函数?我的意思是代替f_texture(“abcd”,“efgh”)来输入f_texture(abcd,efgh)。我注意到这种方式只是在我编写完这段代码之后才需要它。 提前谢谢。

4 个答案:

答案 0 :(得分:2)

如果您不想将字符串常量分配给变量或预处理器对象宏,则另一个选项是使用预处理器函数宏,使用stringification功能:

#define call_f_texture(a,b) f_texture(#a,#b)
....
call_f_texture(rough,friction);

C预处理器将其转换为

f_texture("rough","friction");

答案 1 :(得分:1)

您还可以使用一些宏:

#define ROUGH    "rough"
#define FRICTION "friction"
#define T_ABOUT  "t_about"

int main()
{
    f_texture(ROUGH, FRICTION);
    printf("Friction: %d\n", friction);
    f_texture(ROUGH, T_ABOUT);
    return 0;
}

答案 2 :(得分:0)

你可以这样做,

char rough[]="rough";
char friction[]= "friction";

并致电

f_texture(rough, friction);

答案 3 :(得分:0)

char a[MAX] = "rouch";
char b[MAX} = "friction";

int main()
{
      f_texture();
      ...
}

int f_texture()
{
    /*Checking if both values are present*/
    assert(b);
    assert(a);
}

int f_texture(char* a,char* b)
{
    /*Checking if both values are present*/
    assert(b);
    assert(a);
    ...
}

int main()
{
    char a[MAX] = "rouch";
    char b[MAX} = "friction";
    f_texture(a,b);
    ...
}