使用#pragma once出现#pragma once in main file这个错误 (有图) 求具体解决方案

AKK188888881 2020-01-27 03:13:06
使用#pragma once为什么会报错?



[Warning] #pragma once in main file







#pragma once

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

typedef struct
{
int row;
int col;
int weight;
}RowColWeight;

void CreatGraph(AdjMGraph *G,DataType V[],int n,RowColWeight E[],int e)
{
int i,k;
Initiate(G,n);
for(i=0;i<n;i++)
InsertVertex(G,V[i]);

for(k=0;k<e;k++)
InsertEdge(G,E[k].row,E[k].col,E[k].weight);
}

...全文
9044 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
论语lry 2021-01-05
  • 打赏
  • 举报
回复
引用 8 楼 何方月 的回复:
我遇到了同样的问题,虽然代码可以运行,但是看着这个警告就很难受,有没有大佬说下这个warning是咋回事,怎么解决下
这个和你用的编译器也有关系,比如我用Devcpp就有这个警告,用VS2019就没有
「已注销」 2020-11-05
  • 打赏
  • 举报
回复
我遇到了同样的问题,虽然代码可以运行,但是看着这个警告就很难受,有没有大佬说下这个warning是咋回事,怎么解决下
「已注销」 2020-01-28
  • 打赏
  • 举报
回复
#pragma once和#if……是不需要同时使用的,前者可以单独起作用
一星伴月 2020-01-28
  • 打赏
  • 举报
回复
不要重复导入头文件
AKK188888881 2020-01-28
  • 打赏
  • 举报
回复
不是这些原因
apkipa1 2020-01-27
  • 打赏
  • 举报
回复
看到 Output Filename 就能明白了,你在试图直接编译头文件,于是 #pragma once 明显是没有意义的(就像在源文件里写 #pragma once 一样),于是编译器提出警告。
AKK188888881 2020-01-27
  • 打赏
  • 举报
回复
这样吧 我重换个例子 刚刚那个例子要包含头文件 把方法一和方法二的头文件命名为SeqList.h 方法(一):加#pragma once不行(去掉stdio.h无意义,当然也不行) #pragma once #include<stdio.h> #define MaxSize 100 typedef char DataType; typedef struct { DataType list[MaxSize]; int size; }SeqList; void ListInitiate(SeqList *L) { L->size = 0; } int ListLength(SeqList L) { return L.size; } int ListInsert(SeqList *L,int i, DataType x) { int j; if(L->size>=MaxSize) { printf("数组已满无法插入!\n"); return 0; } else if(i<0||i>L->size) { printf("参数i不合法!\n"); return 0; } else { for(j=L->size;j>i;j--) L->list[j]=L->list[j-1]; L->list[i]=x; L->size++; return 1; } } int ListDelete(SeqList *L,int i,DataType *x) { int j; if(L->size<=0) { printf("顺序表已空无数据可删!\n"); return 0; } else if(i<0||i>L->size-1) { printf("参数i不合法"); return 0; } else { *x=L->list[i]; for(j=i+1;j<=L->size-1;j++)L->list[j-1]=L->list[j]; L->size--; return 1; } } int ListGet(SeqList L,int i,DataType *x) { if(i<0||i>L.size-1) { printf("参数i不合法!\n"); return 0; } else { *x=L.list[i]; return 1; } } 方法(二): #ifndef SeqList_H #define SeqList_H #include<stdio.h> #define MaxSize 100 typedef char DataType; typedef struct { DataType list[MaxSize]; int size; }SeqList; void ListInitiate(SeqList *L) { L->size = 0; } int ListLength(SeqList L) { return L.size; } int ListInsert(SeqList *L,int i, DataType x) { int j; if(L->size>=MaxSize) { printf("数组已满无法插入!\n"); return 0; } else if(i<0||i>L->size) { printf("参数i不合法!\n"); return 0; } else { for(j=L->size;j>i;j--) L->list[j]=L->list[j-1]; L->list[i]=x; L->size++; return 1; } } int ListDelete(SeqList *L,int i,DataType *x) { int j; if(L->size<=0) { printf("顺序表已空无数据可删!\n"); return 0; } else if(i<0||i>L->size-1) { printf("参数i不合法"); return 0; } else { *x=L->list[i]; for(j=i+1;j<=L->size-1;j++)L->list[j-1]=L->list[j]; L->size--; return 1; } } int ListGet(SeqList L,int i,DataType *x) { if(i<0||i>L.size-1) { printf("参数i不合法!\n"); return 0; } else { *x=L.list[i]; return 1; } } #endif 却是可以的。 那为什么第一种方法防包含不行呢?为什么加#pragma once不行?
AKK188888881 2020-01-27
  • 打赏
  • 举报
回复
防包含两种方法 方法(一):加#pragma once不行(去掉stdio.h无意义,当然也不行) #pragma once #include<stdio.h> #include"AdjMGraph.h" typedef struct { int row; int col; int weight; }RowColWeight; void CreatGraph(AdjMGraph *G,DataType V[],int n,RowColWeight E[],int e) { int i,k; Initiate(G,n); for(i=0;i<n;i++) InsertVertex(G,V[i]); for(k=0;k<e;k++) InsertEdge(G,E[k].row,E[k].col,E[k].weight); } 方法(二): #ifndef AdjMGraphCreate_H #define AdjMGraphCreate_H #include<stdio.h> #include"AdjMGraph.h" typedef struct { int row; int col; int weight; }RowColWeight; void CreatGraph(AdjMGraph *G,DataType V[],int n,RowColWeight E[],int e) { int i,k; Initiate(G,n); for(i=0;i<n;i++) InsertVertex(G,V[i]); for(k=0;k<e;k++) InsertEdge(G,E[k].row,E[k].col,E[k].weight); } #endif 确是可以的。 那为什么第一种方法防包含不行呢?为什么加#pragma once不行?
「已注销」 2020-01-27
  • 打赏
  • 举报
回复
当前文件被源文件引用后应当是不需要导入stdio.h的,当然导入后是否会引起这个错误不清楚 另外.h文件容易出一些神奇的问题,如果实在不行,可以重建为.hpp文件试试

70,024

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧