C stddef.h | 212 |错误:预期为‘=’‘’‘’‘;asm&x2019;或‘__属性’;在‘之前;typedef’;

C stddef.h | 212 |错误:预期为‘=’‘’‘’‘;asm&x2019;或‘__属性’;在‘之前;typedef’;,c,C,代码不编译。但我把它放在一个文件中运行,它确实如此。它告诉我: stddef.h | 212 |错误:应为“=”,“,”,“;”,”“typedef”之前的asm“或”属性 到底发生了什么事 Main.c文件: #include "InvMatriz.h" #include <stdio.h> int main(int argc, char **argv) { float **A; int n; printf("Ingrese el tamaño de la matriz: ");

代码不编译。但我把它放在一个文件中运行,它确实如此。它告诉我:

stddef.h | 212 |错误:应为“=”,“,”,“;”,”“typedef”之前的asm“或”属性

到底发生了什么事

Main.c文件:

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

int main(int argc, char **argv)
{
float **A;
int n;
printf("Ingrese el tamaño de la matriz: ");
scanf("%d", &n);

A = ingresematriz(n);
mostrarmatriz(A, n);
printf("adfasd");

return 0;
}
Ingree Matriz.c文件

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



float **ingresematriz(int n)
{

int i, j;

//Asigna espacio en la memoria

float **A;

A = malloc(n * sizeof (float *));
for (i = 0; i < n; i++)
{
    *(A + i) = malloc(n * sizeof(float));
}

//Pide los elementos y los guarda

for (i = 0; i < n; i++)
{
    for (j = 0; j < n; j++)
    {
        printf("Elemento [%d] [%d]:  ", i + 1, j + 1);
        scanf("%f", *(A + i) + j);
    }
}
return A;
}
#include "InvMatriz.h"
#include <stdio.h>

void mostrarmatriz(float **X , int x) //Porque no hace nada pero si compila?
{

int i, j;
for (i = 0; i < x; i++)
{
    for (j = 0; j < x; j++)
    {
        printf("%f        ", *(*(X + i) + j));
    }
    printf("\n");


}
}
#包括“InvMatriz.h”
#包括
浮动**入口矩阵(整数n)
{
int i,j;
//阿西尼亚埃斯帕西奥纪念酒店
浮动**A;
A=malloc(n*sizeof(float*);
对于(i=0;i
Mostrar Matriz.c文件

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



float **ingresematriz(int n)
{

int i, j;

//Asigna espacio en la memoria

float **A;

A = malloc(n * sizeof (float *));
for (i = 0; i < n; i++)
{
    *(A + i) = malloc(n * sizeof(float));
}

//Pide los elementos y los guarda

for (i = 0; i < n; i++)
{
    for (j = 0; j < n; j++)
    {
        printf("Elemento [%d] [%d]:  ", i + 1, j + 1);
        scanf("%f", *(A + i) + j);
    }
}
return A;
}
#include "InvMatriz.h"
#include <stdio.h>

void mostrarmatriz(float **X , int x) //Porque no hace nada pero si compila?
{

int i, j;
for (i = 0; i < x; i++)
{
    for (j = 0; j < x; j++)
    {
        printf("%f        ", *(*(X + i) + j));
    }
    printf("\n");


}
}
#包括“InvMatriz.h”
#包括
void mostrarmatriz(float**X,int X)//Porque不知道该怎么办?
{
int i,j;
对于(i=0;i
我建议您交换包含标题的顺序:

#include <stdio.h>
#include "InvMatriz.h"
如果这样做,则下一个包含文件的第一行将成为注释的一部分,这可能导致后续代码无效。大多数现代编译器都会警告源文件不会以空行结尾


文件包含是将一个文件的内容插入另一个文件的简单情况,一个头中的错误可以在随后包含的头中报告。毫无疑问,stddef.h是stdio.h包含的第一个文件。当你“在一个文件中运行它”时,代码的顺序就不一样了——头的内容插入到stdio.h之后而不是之前。

发布你的编译器输出,以及你用来编译它的命令。希望我们至少能看到哪个.c文件未能编译。在符合标准的编译器中,注释不能跨越文件边界继续。@JonathanLeffler:我认为这值得引用。对于C++11来说,在没有换行符的非空包含之后隐式插入一个换行符肯定是间接正确的。C99 5.1.1.2中有“非空源文件应以新行字符结尾,在进行任何此类拼接之前,该新行字符前面不得紧跟反斜杠字符。”。C11所做的也许是一个没有实际意义的问题。最后你的编译器做了它所做的事情-抱怨ISO合规性是无法完成工作的。相关引用是ISO/IEC 9899:2011,§5.1.1.2翻译阶段,^3源文件被分解为预处理标记和空白字符序列(包括注释)。源文件不得以部分预处理标记或部分注释结尾。(我省略了对脚注7的引用,因为它不是密切相关的,并且你不能在注释中使用上标。)引用的较大上下文表明,这分别适用于作为翻译单元一部分的每个文件。