C预处理器操作符##

C预处理器操作符##,c,c-preprocessor,C,C Preprocessor,我正在读另一篇文章,但我的程序无法运行。我需要在一个新常量中使用C预处理器定义的两个常量。这是我的代码: #include <stdio.h> #include <stdlib.h> #include <string.h> #define DIM 5000 #define ARCHIVOMATRIZ "matrizDiagonalDominante.txt" #define ARCHIVODESTINO DIM ##_## ARCHIVOMATRIZ in

我正在读另一篇文章,但我的程序无法运行。我需要在一个新常量中使用C预处理器定义的两个常量。这是我的代码:

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

#define DIM 5000 
#define ARCHIVOMATRIZ "matrizDiagonalDominante.txt"
#define ARCHIVODESTINO DIM ##_## ARCHIVOMATRIZ
int main(){

    printf("Iniciando ejecucion del programa.\n");


    printf("%s\n", ARCHIVODESTINO);
    printf("Listo\n");

    return 0;
}
#包括
#包括
#包括
#定义尺寸5000
#定义ARCHIVOMATRIZ“MatrizDiagonalDominant.txt”
#定义ARCHIVODESTINO DIM#######ARCHIVOMATRIZ
int main(){
printf(“Iniciando ejeucion del programa.\n”);
printf(“%s\n”,ARCHIVODESTINO);
printf(“Listo\n”);
返回0;
}
但是当我想显示我的新常数时,它不起作用。 有人能帮我吗?

鉴于:

我正在尝试创建一个字符串,该字符串将作为文件文本的名称。它将由两部分组成:编号取自
DIM
(5000、6000、7000等)和文件名取自
ARCHIVOMATRIZ
。我想将文件名设置为:
5000matrizdiagonaldominate.txt
6000matrizdiagonaldominate.txt
,等等

要使用的正确运算符是“字符串化”运算符
,而不是令牌连接运算符

我想这正是你想要的:

#define DIM 5000 
#define ARCHIVOMATRIZ "matrizDiagonalDominante.txt"
#define STRINGIZE(x) #x
#define NAME_FROM_MACROS(x, y)   STRINGIZE(x) y
#define ARCHIVODESTINO NAME_FROM_MACROS(DIM, ARCHIVOMATRIZ)
它依赖于“字符串连接”。当两个字符串文字彼此相邻且只有(可选)空格分隔时,编译器将它们合并为单个字符串文字

测试代码:

#include <stdio.h>

#define DIM 5000 
#define ARCHIVOMATRIZ "matrizDiagonalDominante.txt"
#define STRINGIZE(x) #x
#define NAME_FROM_MACROS(x, y)   STRINGIZE(x) y
#define ARCHIVODESTINO NAME_FROM_MACROS(DIM, ARCHIVOMATRIZ)

int main(void)
{
    printf("Archivo destino: %s\n", ARCHIVODESTINO);
    return 0;
}
如果要在名称各部分之间加下划线,请使用:

#define NAME_FROM_MACROS(x, y)   STRINGIZE(x) "_" y

等等。

你想做什么?您期望的输出是什么?不能以数字开始标识符;通常将宏参数与
##
操作符一起使用。我正在尝试创建一个字符串,该字符串将作为文件文本的名称。它将由两部分组成。一个数字取自DIM(500060007000等),另一个文件名取自ARCHIVOMATRIZ。我想把文件名改为:5000MatrizDiagonalDominate.txt、6000MatrizDiagonalDominate等。请将这些信息添加到问题中,您可以在其中设置格式。我还建议从您的问题中删除注释掉的代码;这里没有用。谢谢@Jonathan Lefftler的提问。
#define NAME_FROM_MACROS(x, y)   STRINGIZE(x) "_" y