c - 如何在Ubuntu上获取VS项目的文件路径?

标签 c

我有一个 C 项目。我在 Ubuntu 上的 VisualStudio 中工作。

我需要从文件中读取内容。

我有这个方法:

        fp = fopen("path_to_file", "r");
        if (fp == NULL)
        {
            printf("\nERROR : file open failed\n");
            return 0;
        }
        while (fgets(buffer, MAX_NAME_LENGTH, (FILE *)fp))
        {
            printf("%s\n", buffer);
        }
        fclose(fp);
        if (line)
            free(line);

我的文件位于项目的根目录,所以我的问题是 - 有没有一种方法可以设置像这样的文件${project_root}/my_tmp.txt

这样 ${project_root} 将类似于一般值。

最佳答案

一种可能的解决方案是利用 VSCode 的任务功能,并使用 -D 选项将项目根路径作为预处理器宏传递给编译器,然后你可以在你的源代码中使用它。

一个示例(有关任务的完整文档,请参阅 here)tasks.json 文件可能如下所示。请注意 args 数组中的 -D 参数。

{
  "version": "2.0.0",
  "tasks": [
    {
      "type": "shell",
      "label": "default build option",
      "command": "/usr/bin/cc",
      "args": ["-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}", "-DPROJECT_ROOT=\"${project_root}\""],
      "problemMatcher": ["$gcc"],
      "group": {
        "kind": "build",
        "isDefault": true
      }
    }
  ]
}

然后,在您的 C 源代码中,您可以利用 PROJECT_ROOT 宏来构造要打开的文件名:

fp = fopen(PROJECT_ROOT "/path_to_file", "r");

关于c - 如何在Ubuntu上获取VS项目的文件路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59438720/

相关文章:

c - Fortran 相当于 C struct malloc/free 用于插件机制

c - 结构帮助。将卡片结构分配给甲板结构中保存的卡片数组

c++ - 否定 float 总是安全的吗

c - 使用 omp 线程的两种相等并行方式之间的实际差异

c++ - 关于C++中float数据类型声明的困惑

c - GTK C 如何将滚动窗口添加到 vbox

Char** 数组第一个元素被神奇地修改

c - 如果我想写另一个函数怎么办?

c - alloca 而不是 alsa 中的局部变量

c - 双链表在 C 中通过 ref 添加元素