c語言條件編譯出錯怎麼辦
❶ C語言中的條件編譯 #if define(宏名稱)為什麼錯誤了
預編譯指令格式錯誤。
#if define (IBMPC)應改為#ifdef IBMPC
這種結構是為了防止頭文件嵌套包含。一般的用法是
#ifndef _IBMPC_H
#define _IBMPC_H
#include"ibmpc.h"
....
#endif
❷ C語言的條件編譯為什麼不能正常運行之三
# include x 3
改為
#define x 3
即使做了上面的修改,程序仍然是錯誤的,
修改後的程序中,#ifndef x 為假,所以不執行int x=1,如此後面的x=2就是個非法表達式(此時x是個右值,而非左值,所以不能為其賦值)。
❸ C語言條件編譯程序問題
一般情況下,源程序中所有的行都參加編譯。但有時希望對其中一部分內容只在滿足一定條件下才進行編譯,即對一部分內容指定編譯條件,這就是「條件編譯」(conditional compile)。條件編譯語句排版時,需考慮以下三種位置:
1)條件編譯語句塊與函數定義體之間不存在相互嵌套(主要在(.h)文件中);
2)條件編譯語句塊嵌套在函數體之外(主要在(.c)文件中);
3)條件編譯語句嵌套在函數體內 (主要在(.c)文件中)。條件編譯指令將決定哪些代碼被編譯,而哪些是不被編譯的。可根據表達式的值或某個特定宏是否被定義來確定編譯條件。
❹ C語言條件編譯出錯
查查你的編譯器的條件編譯語句定義中有沒有#error語句
❺ C語言編譯報錯
#include <stdio.h>
#include <string.h>
int main()
{
int gg(int i);
int i;
while(1){
i=0;
printf(" 1.查看歷史日程表\n");
printf(" 2.輸入新的日程表\n");
printf(" 3.查看已完成的日程表\n");
printf(" 4.查看未完成的日程表\n");
printf(" 5.退出登錄\n");
printf(" 請選擇相應序號: ");
scanf("%d",&i);
if(i==5){
break;
}
gg(i);
printf("\n");
printf("\n");
printf("\n");
}
}
int gg(int i){
int aa();
int bb();
int cc();
int dd();
switch(i){
case 1:
aa();break;
case 2:
bb();break;
case 3:
cc();break;
case 4:
dd();break;
}
}
int aa(){
FILE*fp;
int length=1000;
char str[1001];
if((fp=fopen("11s.txt","r"))==NULL){
printf("無文件");
return 0;
}
while(fgets(str,length,fp)!=NULL){
printf("%s",str);}
return 1;
fclose(fp);
}
int bb(){
FILE*fp;
char str[400];
printf("內容如下:\n");
scanf("%s",str);
if((fp=fopen("11s.txt","a+"))==NULL){
printf("文件不存在");
return 0;
}
fputs("\n",fp);
fputs(str,fp);
printf("加入成功");
fclose(fp);
return 1;
}
int cc(){
FILE*fp;
int length=1000;
char str[1001];
printf("內容如下:\n");
if((fp=fopen("11s.txt","r"))==NULL){
printf("無文件");
return 0;
}
while(fgets(str,length,fp)!=NULL){
if(strstr(str,"已完成")!=NULL){
printf("%s",str);
}
}
fclose(fp);
return 1;
}
int dd(){
FILE*fp;
int lenght=1000;
char str[1001];
printf("內容如下:\n");
if((fp=fopen("11s.txt","r"))==NULL){
printf("無文件");
return 0;
}
while(fgets(str,lenght,fp)!=NULL){
if(strstr(str,"未完成")!=NULL){
printf("%s",str);
}
}
fclose(fp);
return 1;
}
❻ C語言編譯報錯大部分都是先前定義在此,要怎麼修改
自己要學會換一個思路來解決問題,看一看「標准」的頭文件是怎麼寫的,比如stdio.h:
#pragma once
#ifndef _INC_STDIO // include guard for 3rd party interop
#define _INC_STDIO
// ....
#endif // _INC_STDIO
這樣寫可以保證這個頭文件只會被編譯一次。除了聲明、模板類,一般不在頭文件.h里邊寫實現代碼。另外還要學會使用extern這個關鍵字
❼ C語言 條件編譯問題
#include <stdio.h>
#include <stdlib.h>
#define CHANGE 0 //1表示翻譯,0表示不翻譯
int main(void)
{
char a[100];
int i;
char c;
printf("Please input the string\n");
for (i = 0; i < 100; i++)
{
scanf("%c", &a[i]);
if (a[i]== '\n')
{
a[i] = '\0';
break;
}
}
for (i = 0; i < 100;a[i] = c,i++)
{
#ifdef CHANGE 1
{
if(a[i]!= '\0')
{
c = a[i];
if (c == 'z')
{
c = 'a';
continue;
}
c = c -32;
}
else break;//你要加上跳出語句
}
//#else{};
#endif
}
printf("\n");
for (i = 0; i < 100; i++)
{
if (a[i]== '\0')
break;
printf("%c", a[i]);
}
system("pause");
return 0;
}
你調試看一下,當a[i]=='\0'的時候它i仍然在自加,根本就沒有跳出循環,所以後面出現的是亂碼,所以你要加上個break跳出語句!還有你的那個小寫轉換為大寫的時候不對,應該是減去32,大寫轉換為小寫的時候是加上32,理解了的話,別忘了加分哦!祝你好運!
❽ C語言里的條件編譯問題
你看看你的工程配置裡面有沒有預定義,一般像這種系統配置都是在創建工程的時候自動預定義了。如果沒有,那就是真沒有,說明這段代碼在你選擇的這款晶元上就是不需要。