C - 警告:未使用的变量

时间:2014-08-18 19:35:43

标签: c

我在函数中有以下代码。

char * stringFiveds = strtok(stringFive[3], "ds");

当我编译时,我得到警告未使用的变量。

我不打算在此功能中使用srtingFiveds。我想在main()中使用它。我对这个问题有两个部分。

  1. 如果我不想在此功能中使用stringFiveds,如何解决此警告。
  2. 如何在其他功能中访问它,以便我可以在我将创建的其他功能中使用它。
  3. 我是新手,请你尽可能详细。

4 个答案:

答案 0 :(得分:2)

  1. 如果您不想在函数中使用stringFiveds,则可以删除该变量声明,因为您不需要它。

  2. 如果您想让其他函数可以访问它,您可以将其声明为全局变量,或将其作为参数传递给其他函数。

  3. 所以而不是

    char * stringFiveds = strtok(stringFive[3], "ds");
    

    你可以拥有

    strtok(stringFive[3], "ds");
    

    如果要将stringFiveds声明为全局变量,只需在函数外声明它:

    #include <stdio.h>
    
    char * stringFiveds;  // declare outside of function
    
    void foo() {
        // you can access stringFiveds here
    }
    
    int main() {
        // you can also access stringFiveds here   
    }
    

    如果要将stringFiveds作为函数参数传递:

    #include <stdio.h>
    
      // declare outside of function
    
    void foo(char * stringFiveds) {
    
    }
    
    int main() {
        char * stringFiveds;
        foo(stringFiveds);
    
    }
    

答案 1 :(得分:1)

如果您不打算在函数中使用变量,请不要创建变量。如果你只是为调用函数的副作用创建一个变量,你可以删除赋值:C允许你调用一个返回值的函数,就好像它是一个“过程” - 即一个void函数。 / p>

另一种选择是在全局范围内声明变量。如果选择此路线,请考虑使变量static将其保留在其翻译单元的范围内。您也可以将变量设为全局变量,但这通常不是一个好的选择,因为它会使您的数据暴露在有用的范围之外。

如果您计划将其传递给另一个函数,那将被视为“使用变量”,解决“未使用的变量”警告。

注意:如果您对如何消除此警告感到好奇,a common trick is to cast your variable to void

答案 2 :(得分:0)

好吧,你可以做粗略的事情并使它成为一个全局变量(即声明在你的函数之外)。

但这确实不是一个很好的解决方案。这会破坏数据封装,通过让.c文件中的所有内容访问该变量,无论他们是否需要了解它。

更好的解决方案是将您的函数作为参数传递给您。

例如:

function foo(char* stringFiveDs) { // use stringFiveDs here }

或者,您可以传入stringFive并在您需要的函数中声明stringFiveDs。如下所示:

function bar(const char* stringFive) {
     char* stringFiveDs = strtok(stringFive[3], "ds");
     ...
}

答案 3 :(得分:0)

示例代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char **func(const char *str, const char *delim){
    char *strwk = strdup(str);
    char **strs = malloc(sizeof(char*));
    int count = 0;
    char *p;
    for(p=strtok(strwk, delim); p != NULL ; p=strtok(NULL, delim)){
        strs[count++] = strdup(p);//cutting string copy into 
        strs = realloc(strs, (count+1)*sizeof(char*));//+1 : Also, reserved for NULL
    }
    strs[count] = NULL;//end mark
    free(strwk);
    return strs;
}

void func_d(char **ss){
    char **sp = ss;

    while(*sp)
        free(*sp++);

    free(ss);
}

int main(void){
    char *stringFive[5] = {
        "", "16X16", "1,2,3", "123d45s678", "last,,end"
    };
    char **stringFiveds = func(stringFive[3], "ds");
    int i;
    for(i=0; stringFiveds[i] != NULL; ++i)
        printf("%s\n", stringFiveds[i]);
    func_d(stringFiveds);
    return 0;
}