A. 宏定義裡面不能再包含條件編譯語句嗎
不可以
宏定義要求必須寫在一行
而條件編譯必須是獨立一行。
這兩個本身就是矛盾的
要條件編譯加宏定義, 只能是條件編譯在外層,宏定義在內層
比如
#include<stdio.h>
#ifdefTEST
#defineVALUE0
#else
#defineVALUE1
#endif
intmain()
{
printf("%d ",VALUE);
}
B. 宏函數里能包含條件編譯嗎
這個跟你是一樣的。
http://bbs.csdn.net/topics/90157313
還是用其他方法解決吧
C. 條件編譯--標識符和宏標識符的問題
沒什麼區別,本質是一樣的
第二種應該是這樣的,你寫錯了
#ifndef 宏標識符
程序段1
#else
程序段2
#endif
D. C語言中的條件編譯 #if define(宏名稱)為什麼錯誤了
預編譯指令格式錯誤。
#if define (IBMPC)應改為#ifdef IBMPC
這種結構是為了防止頭文件嵌套包含。一般的用法是
#ifndef _IBMPC_H
#define _IBMPC_H
#include"ibmpc.h"
....
#endif
E. 「C語言的預處理 不能實現宏定義和條件編譯的功能」和「C語言的預處理不能實現宏定義和條件編譯的功能」
這兩句話是一個意思, C語言中的預處理,是可以實現宏定義和條件編譯功能的。比如下面的代碼定義了一個宏S,它的值是」hello world ",可以用printf函數直接列印出來。
#include<stdio.h>
#defineS"helloworld "
intmain()
{
printf(S);
return0;
}
C語言中的預處理也可以實現條件編譯功能,預處理到現在依然存在的一個重要原因就在於此。比如下面的代碼:
#include<stdio.h>
intmain()
{
#ifdef_DEBUG
printf("程序生成的debug版 ");
#else
printf("程序生成的是release版 ");
#endif
return0;
}
F. C語言宏定義 用條件編譯
條件編譯以及所有前面帶「#」的語句,是在編譯階段執行的語句,不會生成運行時的代碼。而你的y是在運行時才進行賦值的,所以是無法用條件編譯來實現的。
直接寫成條件語句就行:
{
if R
printf("%d是閏年\n",y);
else
printf("%d不是閏年\n",y);
}
G. C語言中的條件編譯宏有哪些可以改進的方法
#include #define DEBUG int main() { int x=1,y=2,z=3; #ifdef DEBUG printf("%d,%d,%d\n",x,y,z); #endif return 0; } 你先試試這個這個程序看看有沒有輸出,然後再把#define DEBUG刪掉重新運行程序看看。
H. C語言:條件編譯的標識符不能放在程序裡面宏定義嗎
定義是可以的,叫做條件編譯。
在再前面,加一個語句
#define
BZ
編譯的時候,就會編譯「程序1」,而不編譯「程序2」;
如果前面,以及include的文件裡面都沒有BZ的定義,編譯時,就不會編譯「程序1」,而是編譯「程序2」
if
else
就錯了。
#ifdef
BZ,僅僅是說BZ已經定義,與其值沒有任何關系,你讓他=0,=別的什麼,不會影響#ifdef的行為。
條件編譯是編譯時的選項,與運行時無關,你不能在運行時做什麼選擇。
從if語句看,你的條件是a=1,不是BZ是否定義。
I. 如何在makefile中定義宏進行條件編譯
你可以藉助BASHSHELL強大的字元串處理能力來實現啊!
比如你可以將你想定義的「宏」放在makefile.include中,然後將其賦值,而在makefile中加入include makefile.include一行,在其後需要進行條件預編譯時進行字元串比較來實現啊!